Witam. Mam pewien problem ze zrozumieniem wykonywania akcji w springu. Przykładowo mam taką stronkę wyświetlającą wszystkich użytkowników:
<form action="addAdminForm" method="post">
<input type="submit" value="Dodaj administratora" />
</form>
<table id="myTable">
<tr>
<th width="200px">Login</th>
<th width="200px">Imię</th>
<th width="200px">Nazwisko</th>
<th width="200px">Email</th>
<th width="140px">Edytuj</th>
<th width="140px">Usuń</th>
</tr>
<c:forEach items="${admins}" var="admin">
<tr>
<td><c:out value="${admin.username}" /></td>
<td><c:out value="${admin.firstName}" /></td>
<td><c:out value="${admin.lastName}" /></td>
<td><c:out value="${admin.email}" /></td>
<td><a
href="<c:url value='/admin/editAdminForm/${admin.id}' />">Edytuj</a></td>
<td><a href="<c:url value='/admin/removeAdmin/${admin.id}' />">Usuń</a></td>
</tr>
</c:forEach>
</table>
U góry mam prosty przycisk, który przekierowuję żądanie do kontrolera:
@RequestMapping(value = "/admin/addAdminForm", method = RequestMethod.POST)
public ModelAndView goAddAdminForm() {
ModelAndView mav = new ModelAndView("admin/addadmin");
mav.addObject("user", new UserDto());
return mav;
}
i potem wyświetla nam się formularz do wypełnienia z danymi użytkownika. Tylko jest jeden problem, jeśli w formie parametr action wygląda tak
<form action="/admin/addAdminForm" method="post">
to przy próbie przekierowania dostaję błąd 404
The requested resource is not available
a w URL mam
http://localhost:8181/admin/addAdminForm
A po tym przekierowaniu powinien wyglądać:
http://localhost:8181/ibank/admin/addAdminForm
To samo dalej na stronie addAdmin mam formularz <form:form action="/admin/addAdmin" modelAttribute="user" method="post">
i ono też w takiej formie daje identyczny błąd, ale jeśli zmienię w form na <code class="java"><form:form action="addAdmin" modelAttribute="user" method="post">
wszystko działa jak należy. Przecież kontroler reaguje na żądanie "admin/addAdminForm" a nie samo "addAdminForm". W innych miejsach przy przekierowaniu na strony itp działa to normalnie, że podaję np.
a href="<c:url value='/admin/manageaccount' />">Zarządzaj kontami</a>
Tak samo mam przy przejściu
```html
<td><a href="<c:url value='/admin/editAdminForm/${admin.id}' />">Edytuj</a></td>
do strony z formularzem do edycji muszę dokleić kontekst aplikacji żeby zadziałało:
<form:form action="${pageContext.request.contextPath}/admin/editAdmin"
modelAttribute="user" method="post">
a w kontrolerze oczywiście mam:
@RequestMapping(value = "/admin/editAdmin", method = RequestMethod.POST)
Czy nie powinno zadzialać
action="/admin/editAdmin"
Sam już tego nie rozumiem czemu tak a nie inaczej i to zawsze przy formularzach.
Jeszcze drugie pytanie na marginesie, mając stronę z listą userów jak powyżej i takiego typu tabelę gdzie operacje edytuj i usuń wykonujemy przez taki odsyłacz
```html
<td><a
href="<c:url value='/admin/editAdminForm/${admin.id}' />">Edytuj</a></td>
<td><a href="<c:url value='/admin/removeAdmin/${admin.id}' />">Usuń</a></td>
Czy nie da się przesłać całego obiektu admin? Tylko muszę przesyłać samo ID i potem w kontrolerze najpierw wyszukiwać po id tego użytkownika:
User user = userService.findUser(id);
i dopiero potem mogę zrobić edycję, bo metoda merge przyjmuje cały obiekt. Poszukałem trochę, ale nic takiego nie znalazłem jedyna alternatywa jak mi do głowy przychodzi to dać tą listę w formularz i pod edytuj i usuń dodać przyciski zamiast odsyłaczy i w formie dać
modelAttribute="admin"