Zacznę od tego co chce ostatecznie osiągnąć, a więc na jednej stronie (checkout.jsp) chce mieć dwa formularze (form:form...) obsługiwane przez jednego kontrolera (CheckoutController.java).
Zasadę działania formatki <form> znam: czyli kontroler wstrzykuje nam obiekt (metoda GET) który będzie wypełniany, formatka wpakowuje we wstrzyknięty obiekt dane (poprawne setery i getery do nazw zmiennych musza być) na sam koniec odbieramy dane (metoda POST).
Dla pojedynczej formatki i bez @RequestMapping(value = "", ...) wszystko działa elegancko :) problem zaczyna się przy dodaniu drugiej, wiadomo jakoś je trzeba rozróżnić. Postanowiłem wykorzystać mapowanie zapytań.
Konkretnie problem wychodzi przy wypełnianiu obiektu, ponieważ nazwana metoda POST go nie widzi.
*.jsp:
<html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<jsp:include page="head.jsp"/>
<body>
Witaj: <br>${sesion}
<br>
<h2>Zaloguj sie</h2>
<p class="info">Jesli posiadasz juz konto to mozesz sie zalogowac</p>
<form:form method="POST" action="/domena/checkout/user.do" commandName="user1">
<form:input type="text" path="imie"/>
<form:input type="text" path="email"/>
<form:input type="text" path="haslo"/>
<form:input type="text" path="kraj"/>
<form:hidden path="id" />
<input type="submit"/>
</form:form>
<br><br>
<p>przekierowanie na index GET</p>
<form:form method="GET" action="/domena/checkout/uu.do">
<input type="submit"/>
</form:form>
<br><br>
<p>przekierowanie na index POST</p>
<form:form method="POST" action="/domena/checkout/oo.do">
<input type="submit"/>
</form:form>
</body>
</html>
formatki "przekierowania..." są testowe (obydwie działają poprawnie)
controler:
@Controller
public class CheckoutController {
@Autowired
private LoginI login;
@Autowired
private UserSesion sesion;
@RequestMapping(value="/checkout", method = RequestMethod.GET)
public ModelAndView loginForm() {
ModelAndView m = new ModelAndView("/checkout");
//ModelAndView m = new ModelAndView("/checkout");
m.addObject("user1", new User());
m.addObject("sesion",sesion.getUser());
return m;
}
@RequestMapping(value = "/checkout/user.do", method = RequestMethod.POST)
public ModelAndView login3(User user1) throws Exception {
String name = user1.getImie();
String email = user1.getEmail();
String haslo = user1.getHaslo();
String ktaj = user1.getKraj();
login.setEmail(email);
login.setHaslo(haslo);
login.loguj();
ModelAndView m = new ModelAndView("/shopen-online/checkout.htm");
return m;
}
/*@RequestMapping(value = "/checkout/user.do", method = RequestMethod.GET)
public ModelAndView loginFormMapping(User user1) throws Exception {
ModelAndView m = new ModelAndView("/checkout/user.do");
m.addObject("user1", new User());
return m;
}//*/
/*@RequestMapping(value = "/checkout", method = RequestMethod.GET)
public ModelAndView loginFormMapping(User user1) throws Exception {
ModelAndView m = new ModelAndView("/checkout/user.do");
m.addObject("user1", new User());
return m;
}//*/
@RequestMapping(value = "/checkout/uu.do", method = RequestMethod.GET)
public ModelAndView login1() throws Exception {
return new ModelAndView(new RedirectView("/domena/index.htm"));
}
@RequestMapping(value = "/checkout/oo.do", method = RequestMethod.POST)
public ModelAndView login2() throws Exception {
return new ModelAndView(new RedirectView("/domena/index.htm"));
}
}
Błąd przy wyświetlaniu strony:
HTTP Status 404 - /katalog/WEB-INF/jsp/domena/checkout.htm.jsp
type Status report
message /katalog/WEB-INF/jsp/domena/checkout.htm.jsp
description The requested resource is not available.
Apache Tomcat/7.0.53
Wyjatek:
(...)
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/domena] threw exception [An exception occurred processing JSP page /WEB-INF/jsp/checkout.jsp at line 2724:
Zaloguj sie
25:Jesli posiadasz juz konto na ShopenOnline to mozesz sie zalogowac
26: <form:form method="POST" action="/domena/checkout/user.do" commandName="user1">
27: <form:input type="text" path="imie"/>
28: <form:input type="text" path="email"/>
29: <form:input type="text" path="haslo"/>
30: <form:input type="text" path="kraj"/></p>Stacktrace:] with root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'user1' available as request attribute
(...)