Spring MVC vorbei ArrayList zurück zum controller
Ich bin neu auf den Frühling. Ich zeigt eine Liste mit Benutzern. Jede Zeile hat eine checkbox zum entfernen der Benutzer.
Controller:
@Controller
public class AdminController {
@Autowired
private UserDao userDao;
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public ModelAndView adminPage() {
ModelAndView model = new ModelAndView();
model.addObject("users", userDao.findAll());
model.setViewName("admin");
return model;
}
@RequestMapping(value = "admin/remove", method = RequestMethod.POST)
public ModelAndView removeUser(@ModelAttribute(value = "users") ArrayList<User> users) {
ModelAndView model = new ModelAndView();
//UPDATE USERS HERE
model.setViewName("redirect:/admin");
return model;
}
JSP:
<form:form action="/admin/remove" method="POST" modelAttribute="users">
<table class="table table-striped">
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Email/login</th>
<th>Profession</th>
<th>Select<th>
</tr>
</thead>
<tbody>
<c:forEach var="user" items="${users}">
<tr>
<td>${user.firstName}</td>
<td>${user.lastName}</td>
<td>${user.login}</td>
<td>${user.profession}</td>
<td><input type="checkbox" value="${user.delete}"/></td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" value="Delete user(s)" class="btn-danger" />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form:form>
Die Liste ist korrekt wiedergegeben. Wenn ich drücken Sie die "Delete user(s)" - Taste. Die @modelAttribute Benutzer leer ist.
Ich habe auch versucht, das einwickeln der Liste in eine neue Klasse, aber ich bekomme die gleichen Ergebnisse.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre ModelAttribute ist leer, da es keine form der Daten verbindlich geschehen aus Ihrer jsp Ihrer model-Attribut. Werfen Sie einen Blick auf wie Spring Probe für die Bindung Sammlungen "http://developer.ucsd.edu/develop/user-interface/building-a-form/form-binding-with-collections.html". Dies wird helfen, Sie zu verstehen.
Meisten der Spring-Anwendung verwendet in der Regel form:input mit "Pfad" - parameter zu tun, Daten-Bindung.
Dank minion, ich fand die Antwort
Wrapper:
Controller:
}
Anzeigen:
Danke!
EDIT: nicht zu vergessen, fügen Sie die Felder, die Sie nicht anzeigen.
Zum Beispiel:
Wenn Sie nicht hinzufügen die id, die Ihr löschen wird nicht funktionieren, weil die id in die User-Objekt zurückgegeben wird NULL sein.
Sollten Sie bauen Ihre Funktionalität rund um spring-mvc wählen Sie tag. Einige änderungen würde in Ordnung sein, obwohl, schieben Sie eine Liste in eine POJO-Klasse z.B.
ändern Ihre Zuordnung zu
schließlich, tauschen Sie Ihre c:forEach mit Federn wählen Sie tag, so etwas wie
Dies ist, weil Sie eine Umleitung: in Ihrem Blick. Haben Sie einen Blick auf Flash Attribute :
Sollten Sie in der Lage, um die aktualisierte Liste 🙂