Spring MVC, Mapowanie

0

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 27

24:

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
(...)

0

gdyby ktoś był ciekawy rozwiązania to:
w form -> input ustawiamy jakieś name do którego możemy się odwołać w atrybucie @RequestMapping -> params = ""

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0