Hej. Robię stronę w oparciu o pewną formatkę --> http://www.mkyong.com/spring-mvc/spring-mvc-form-handling-example/
Chciałbym zwrócić się o pomoc, mam już gotowy formularz "wstępnego" obliczania składki ubezpieczenia samochodu, walidacja działa i kiedy wszystkie dane są poprawne chcę żeby użytkownik został przekierowany na stronę główną, jednak nic się nie dzieje, czy któs mógłby mi powiedzieć gdzie leży błąd?
Kontroler
package com.mkyong.form.web;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.mkyong.form.model.UbezpieczenieSamochodu;
import com.mkyong.form.service.UbezpieczenieSamochoduService;
import com.mkyong.form.validator.UbezpieczenieSamochoduFormValidator;
@Controller
public class UbezpieczenieSamochoduController {
private final Logger logger = LoggerFactory.getLogger(UbezpieczenieSamochoduController.class);
@Autowired
UbezpieczenieSamochoduFormValidator ubezpieczenieSamochoduFormValidator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(ubezpieczenieSamochoduFormValidator);
}
private UbezpieczenieSamochoduService ubezpieczenieSamochoduService;
@Autowired
public void setUbezpieczenieSamochoduService(UbezpieczenieSamochoduService ubezpieczenieSamochoduService) {
this.ubezpieczenieSamochoduService = ubezpieczenieSamochoduService;
}
@RequestMapping (value = "/", method = RequestMethod.GET)
public String index(Model model) {
logger.debug("index()");
return "redirect:/ubezpieczenia";
}
@RequestMapping (value = "/ubezpieczenia", method = RequestMethod.GET)
public String showMainPage(Model model) {
logger.debug("ShowMainPage()");
model.addAttribute("users",ubezpieczenieSamochoduService.findAll());
return "users/stronaGlowna";
}
@RequestMapping(value = "/ubezpieczenia/dodaj", method = RequestMethod.GET)
public String showAddUbezpiecznieSamochoduForm(Model model) {
logger.debug("showAddUbezpieczenieSamochoduForm");
UbezpieczenieSamochodu ubezpieczenieSamochodu = new UbezpieczenieSamochodu();
ubezpieczenieSamochodu.setRokProdukcji(1994);
ubezpieczenieSamochodu.setMarka("Audi");
ubezpieczenieSamochodu.setModel("80");
ubezpieczenieSamochodu.setPojemnoscSilnika("od 0.9 do 1.2");
ubezpieczenieSamochodu.setWersjaNadwozia("Sedan");
ubezpieczenieSamochodu.setZakresUbezpieczenia("OC");
ubezpieczenieSamochodu.setKierowcyPonizej26RokuZycia("Nie");
ubezpieczenieSamochodu.setLiczbaLatJazdyBezszkod("2");
ubezpieczenieSamochodu.setLiczbaSzkodOst5Lat("0");
ubezpieczenieSamochodu.setSredniRocznyPrzebiegKm("20001-40000");
ubezpieczenieSamochodu.setStanCywilny("Kawaler/Panna");
ubezpieczenieSamochodu.setTelefon(723485375);
ubezpieczenieSamochodu.setDataUrodzenia("20-09-1994");
ubezpieczenieSamochodu.setDataRozpoczeciaUbezpieczenia("30-06-2017");
model.addAttribute("ubezpieczenieSamochoduForm",ubezpieczenieSamochodu);
populateDefaultModel(model);
return "users/ubezpieczenieSamochoduForm";
}
@RequestMapping(value = "/ubezpieczenia", method = RequestMethod.POST)
public String saveOrUpdateUbezpieczenieSamochodu(@ModelAttribute("ubezpieczenieSamochoduForm") @Validated UbezpieczenieSamochodu ubezpieczenieSamochodu,
BindingResult result, Model model, final RedirectAttributes redirectAttributes) {
logger.debug("saveOrUpdateUbezpieczenieSamochodu() : {}", ubezpieczenieSamochodu);
if (result.hasErrors()) {
populateDefaultModel(model);
return "users/ubezpieczenieSamochoduForm";
} else {
/* redirectAttributes.addFlashAttribute("cdc","complete!");
if (ubezpieczenieSamochodu.isNew())
redirectAttributes.addFlashAttribute("wiadomosc","uzytkownik dodany");
else {
redirectAttributes.addFlashAttribute("wiadomosc2","uzytkownik zaktualizowany");
}
*/
ubezpieczenieSamochoduService.saveOrUpdate(ubezpieczenieSamochodu);
// + ubezpieczenieSamochodu.getId();
//return "redirect:/ubezpieczenia";
return "redirect:/ubezpieczenia";
}
}
private void populateDefaultModel(Model model) {
List<String> pojemnoscSilnika = new ArrayList<String>();
pojemnoscSilnika.add("od 0.9 do 1.2");
pojemnoscSilnika.add("od 1.2 do 1.6");
pojemnoscSilnika.add("od 1.6 do 2.0");
pojemnoscSilnika.add("od 2.0 do 3.0");
model.addAttribute("pojemnoscSilnika",pojemnoscSilnika);
List<String> wersjaNadwozia = new ArrayList<String>();
wersjaNadwozia.add("Sedan");
wersjaNadwozia.add("Kombi");
wersjaNadwozia.add("Hatchback");
wersjaNadwozia.add("SUV");
wersjaNadwozia.add("Coupe");
wersjaNadwozia.add("Cabriolet");
model.addAttribute("wersjaNadwozia",wersjaNadwozia);
List<String> zakresUbezpieczenia = new ArrayList<String>();
zakresUbezpieczenia.add("OC");
zakresUbezpieczenia.add("OC i AC");
model.addAttribute("zakresUbezpieczenia", zakresUbezpieczenia);
List<String> kierowcyPonizej26RokuZycia = new ArrayList<String>();
kierowcyPonizej26RokuZycia.add("Tak");
kierowcyPonizej26RokuZycia.add("Nie");
model.addAttribute("kierowcyPonizej26RokuZycia", kierowcyPonizej26RokuZycia);
List<String> liczbaLatJazdyBezszkod = new ArrayList<String>();
liczbaLatJazdyBezszkod.add("1");
liczbaLatJazdyBezszkod.add("2");
liczbaLatJazdyBezszkod.add("3");
liczbaLatJazdyBezszkod.add("4");
liczbaLatJazdyBezszkod.add("5");
model.addAttribute("liczbaLatJazdyBezszkod", liczbaLatJazdyBezszkod);
List<String> liczbaSzkodOst5Lat = new ArrayList<String>();
liczbaSzkodOst5Lat.add("0");
liczbaSzkodOst5Lat.add("1");
liczbaSzkodOst5Lat.add("2");
liczbaSzkodOst5Lat.add("3");
liczbaSzkodOst5Lat.add("więcej niż 3");
model.addAttribute("liczbaSzkodOst5Lat", liczbaSzkodOst5Lat);
List<String> sredniRocznyPrzebiegKm = new ArrayList<String>();
sredniRocznyPrzebiegKm.add("Poniżej 5000");
sredniRocznyPrzebiegKm.add("5001-10000");
sredniRocznyPrzebiegKm.add("10001-20000");
sredniRocznyPrzebiegKm.add("20001-40000");
sredniRocznyPrzebiegKm.add("Więcej niż 40000");
model.addAttribute("sredniRocznyPrzebiegKm", sredniRocznyPrzebiegKm);
List<String> stanCywilny = new ArrayList<String>();
stanCywilny.add("Kawaler/Panna");
stanCywilny.add("Żonaty/Zamężna");
stanCywilny.add("Rozwodnik/Rozwódka");
stanCywilny.add("Wdowiec/Wdowa");
model.addAttribute("stanCywilny", stanCywilny);
}
@ExceptionHandler(EmptyResultDataAccessException.class)
public ModelAndView handleEmptyData(HttpServletRequest req, Exception ex) {
logger.debug("handleEmptyData()");
logger.error("Request: {}, error ", req.getRequestURL(), ex);
ModelAndView model = new ModelAndView();
model.setViewName("users/show");
model.addObject("msg", "nie znaleziono");
return model;
}
}
Strona formularza
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page session="false"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="en">
<spring:url value="/resources/core/css/bootstrap.min.css" var="bootstrapCss" />
<link href="${bootstrapCss}" rel="stylesheet" />
<link href="${coreCss}" rel="stylesheet" />
<div class="container">
<c:choose>
<c:when test="${ubezpieczenieSamochoduForm['new']}">
<h1>Oblicz składkę ubezpieczenia samochodu</h1>
</c:when>
<c:otherwise>
<h1></h1>
</c:otherwise>
</c:choose>
<br />
<spring:url value="/ubezpieczenia" var="ubezpieczenieSamochoduOblicz" />
<form:form class="form-horizontal" method="post" modelAttribute="ubezpieczenieSamochoduForm" action="${ubezpieczenieSamochoduOblicz}">
<form:hidden path="id" />
<spring:bind path="rokProdukcji">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Rok Produkcji</label>
<div class="col-sm-10">
<form:input path="rokProdukcji" type="text" class="form-control " id="rokProdukcji" placeholder="Rok produkcji" />
<form:errors path="rokProdukcji" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="marka">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Marka</label>
<div class="col-sm-10">
<form:input path="marka" type="text" class="form-control " id="marka" placeholder="Marka" />
<form:errors path="marka" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="model">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Model</label>
<div class="col-sm-10">
<form:input path="Model" type="text" class="form-control " id="model" placeholder="Model" />
<form:errors path="Model" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="pojemnoscSilnika">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Pojemność silnika</label>
<div class="col-sm-5">
<form:select path="pojemnoscSilnika" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${pojemnoscSilnika}" />
</form:select>
<form:errors path="pojemnoscSilnika" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="wersjaNadwozia">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Wersja Nadwozia</label>
<div class="col-sm-5">
<form:select path="wersjaNadwozia" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${wersjaNadwozia}" />
</form:select>
<form:errors path="wersjaNadwozia" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="sredniRocznyPrzebiegKm">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">sredniRocznyPrzebiegKm</label>
<div class="col-sm-5">
<form:select path="sredniRocznyPrzebiegKm" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${sredniRocznyPrzebiegKm}" />
</form:select>
<form:errors path="sredniRocznyPrzebiegKm" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="zakresUbezpieczenia">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Zakres Ubezpieczenia</label>
<div class="col-sm-5">
<form:select path="zakresUbezpieczenia" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${zakresUbezpieczenia}" />
</form:select>
<form:errors path="zakresUbezpieczenia" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="plec">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Pleć</label>
<div class="col-sm-10">
<label class="radio-inline"> <form:radiobutton path="plec" value="M" /> Mężczyzna
</label> <label class="radio-inline"> <form:radiobutton path="plec" value="F" /> Kobieta
</label> <br />
<form:errors path="plec" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="stanCywilny">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Stan cywilny</label>
<div class="col-sm-5">
<form:select path="stanCywilny" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${stanCywilny}" />
</form:select>
<form:errors path="stanCywilny" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="dataUrodzenia">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Data urodzenia</label>
<div class="col-sm-10">
<form:input path="dataUrodzenia" type="text" class="form-control " id="dataUrodzenia" placeholder="Data urodzenia" />
<form:errors path="dataUrodzenia" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="rokWydaniaPrawaJazdy">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Rok wydania prawa jazdy</label>
<div class="col-sm-10">
<form:input path="rokWydaniaPrawaJazdy" type="text" class="form-control " id="rokWydaniaPrawaJazdy" placeholder="Rok wydania prawa jazdy" />
<form:errors path="rokWydaniaPrawaJazdy" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="kierowcyPonizej26RokuZycia">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Kierowcy poniżej 26 roku życia</label>
<div class="col-sm-5">
<form:select path="kierowcyPonizej26RokuZycia" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${kierowcyPonizej26RokuZycia}" />
</form:select>
<form:errors path="kierowcyPonizej26RokuZycia" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="liczbaLatJazdyBezszkod">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Liczba lat jazdy bezszkodowej</label>
<div class="col-sm-5">
<form:select path="liczbaLatJazdyBezszkod" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${liczbaLatJazdyBezszkod}" />
</form:select>
<form:errors path="liczbaLatJazdyBezszkod" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="liczbaSzkodOst5Lat">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Liczba szkod w ostatnich 5 latach</label>
<div class="col-sm-5">
<form:select path="liczbaSzkodOst5Lat" class="form-control">
<form:option value="NONE" label="--- Wybierz ---" />
<form:options items="${liczbaSzkodOst5Lat}" />
</form:select>
<form:errors path="liczbaSzkodOst5Lat" class="control-label" />
</div>
<div class="col-sm-5"></div>
</div>
</spring:bind>
<spring:bind path="telefon">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label">Telefon</label>
<div class="col-sm-10">
<form:input path="telefon" type="text" class="form-control " id="telefon" placeholder="Telefon" />
<form:errors path="telefon" class="control-label" />
</div>
</div>
</spring:bind>
<spring:bind path="adresEmail">
<div class="form-group ${status.error ? 'has-error' : ''}">
<label class="col-sm-2 control-label"> Adres email</label>
<div class="col-sm-10">
<form:input path="adresEmail" class="form-control" id="adresEmail" placeholder="[email protected]" />
<form:errors path="adresEmail" class="control-label" />
</div>
</div>
</spring:bind>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<c:choose>
<c:when test="${ubezpieczenieSamochoduForm['new']}">
<button type="submit" class="btn-lg btn-primary pull-right" >Oblicz składkę</button>
</c:when>
<c:otherwise>
<button type="submit" class="btn-lg btn-primary pull-right">Update</button>
</c:otherwise>
</c:choose>
</div>
</div>
</form:form>
</div>
</body>
</html>
Konsola
2017-05-28 21:56:59 [http-nio-8080-exec-10] DEBUG c.m.f.w.UbezpieczenieSamochoduController - saveOrUpdateUbezpieczenieSamochodu() : UbezpieczenieSamochodu [id=null, rokProdukcji1994, markaAudi, model80, pojemnoscSilnikaod 0.9 do 1.2, wersjaNadwoziaSedan, sredniRocznyPrzebiegKm20001-40000, zakresUbezpieczeniaOC, plecnull, stanCywilnyKawaler/PannadataUrodzenia20-09-1994, rokWydaniaPrawaJazdy23, kierowcyPonizej26RokuZyciaNie, liczbaLatJazdyBezszkod2, liczbaSzkodOst5Lat0, telefon723485375, [email protected]]true