Przesłanie modelu z widoku do kontrolera w Springu.

0

Mam taki prosty kontroler

@RequestMapping(value = "/admin/manage/{id}", method = RequestMethod.GET)
public ModelAndView goManage(@PathVariable int id) {
    UserAccount userAccount = userAccountService.findUserAccount(id);
    ModelAndView mav = new ModelAndView("admin/manage");
    mav.addObject("userAccount", userAccount);
    return mav;
} 

z którego zwracam obiekt typu userAccount do widoku. Widok tylko wyświetla dane:

<div id="info">
    <label>Login:</label><label>${userAccount.userDto.username}</label><br />
    <label>Name:</label><label>${userAccount.userDto.firstName}
        ${userAccount.userDto.lastName}</label>
</div>
    <form:form
        action="${pageContext.request.contextPath}/admin/go"
        modelAttribute="userAccount" method="post">
        <input class="myButton" type="submit" value="Go" />
    </form:form> 

Tutaj wszystko działa ok, ale chciałbym ten obiekt przekazać dalej, tzn. do kontrolera po wciśnięciu przycisku przez użytkownika. Dałem na stronię forma i modelAttribute, ale to nie działa. Bo w kontrolerze dostaję nulla.

@RequestMapping(value = "/admin/go", method = RequestMethod.POST)
public ModelAndView goWithDrawalInvestment(
        @ModelAttribute("userAccount") UserAccount userAccount) {
        userAccount.setBalance(0);
        mav.addObject("userAccount", userAccountDto);
        return mav;
}

Jak przekazać taki cały obiekt z widoku do kontrolera? Jest to możliwe?

0

Na oko to powinno działać. Jesteś pewien że nie działa i że problem nie leży gdzies indziej?

0

Podstawowe pytanie, jakie parametry są przekazywane do tego kontrollera, idzie tam coś w ogóle z tej formatki ?

0
Shalom napisał(a):

Na oko to powinno działać. Jesteś pewien że nie działa i że problem nie leży gdzies indziej?

Nie robię nic pomiędzy tym. Widok dostaje dobry model bo wyświetla wszystko. Co do tego forma to tak to wrzuciłem bo nie miałem specjalnego pomysłu jak przerzucić cały obiekt:

    <form:form
        action="${pageContext.request.contextPath}/admin/go"
        modelAttribute="userAccount" method="post">
        <input class="myButton" type="submit" value="Go" />
    </form:form> 

ale to też wydawało mi się, że nie zadziała bo przypominam sobie, że np. miałem formularz z edycją. Taki jego fragment wrzucę:

<form:form
				action="${pageContext.request.contextPath}/admin/editAdmin"
				modelAttribute="user" method="post">
				<form:input type="hidden" path="id" />
				<form:label path="username">Login: </form:label>
				<form:input path="username" />
				<form:errors path="username" cssClass="error" />
				<br />
				<br />
				<form:label path="password">Hasło: </form:label>
				<form:password path="password" />
				<form:errors path="password" cssClass="error" />

To ten

modelAttribute="user"

ok działał wszystko wyświetlał inputy były wypełnione itp. Potem sobie klikałem edytuj i szło do kontrolera i robiłem merga na tym.

Jednak gdybym pominął

<form:input type="hidden" path="id" /> 

to merge by nie zadziałał bo by nie wypełniłoby pola z id. Tutaj jest chyba analogiczna sytuacja i przerzucam pustego userAccount. Czyli wychodzi na to, że w formie trzeba wszystkie pola wypełniać żeby poszedł userAccount jak ze strony. Tylko to bez sensu bo wychodzi na to, że musiałbym w tym formie dać same input hidden...

niezdecydowany napisał(a):

Podstawowe pytanie, jakie parametry są przekazywane do tego kontrollera, idzie tam coś w ogóle z tej formatki ?

Form jest taki:

    <form:form
        action="${pageContext.request.contextPath}/admin/go"
        modelAttribute="userAccount" method="post">
        <input class="myButton" type="submit" value="Go" />
    </form:form> 

Wydawało mi się, że jakoś mogę przesłać dalej tego userAccount, skoro można wyświetlić na stronie dane z niego to jak przejdzie dalej to przejdzie pełny, ale dostaję nulla.

Czyli nie ma bardzo sposobu jak przerzucić tak cały obiekt? Muszę się znowu ratować przesyłaniem samego id i potem wyszukiwaniem od nowa obiektu w kontrolerze?

0

Ok teraz dopiero popatrzyłem o co dokładnie chodzi. Nie wiem czy jest sposób na to co chcesz osiągnąć. Tzn taki bez miliona "input type hidden" ;]

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