2010-01-13 13 views
10

Ich benutze Spring MVC 3.0 und kann nicht alle Teile dieses Problems sehen: mein Controller wird eine Liste von Domain-Objekten erstellen. Nehmen wir ein einfaches Benutzerobjekt mit den Eigenschaften firstName, lastName, age und role. Ich möchte diese Liste von Benutzern in einer Tabelle ausgeben (eine Spalte pro Eigenschaft), wobei jede Zeile auch ein Kontrollkästchen hat, die alle standardmäßig ausgewählt sind. Die Person, die die Seite verwendet, kann dann möglicherweise einige davon abwählen. Wenn sie den Submit-Button drücken, würde ich gerne die Liste ausgewählter Benutzer nehmen und etwas damit machen können.Spring MVC und Checkboxen

Ich weiß, es gibt ein Formular: checkboxes-Tag im Frühjahr, aber ich kann nicht ganz sehen, wie man es benutzt und wie man die Ergebnisse in den Controller bekommt.

Irgendwelche Hilfe oder Vorschläge?

+0

@axtavt: nur um weitere Informationen zu liefern, habe ich auch mit formCheckboxes zu kämpfen, und schließlich aufgegeben. Spring Binding ist nicht gut unterstützt für Checkboxen –

Antwort

20

Wenn Sie User Objekt ein id Feld hat, können Sie IDs von ausgewählten Benutzern wie folgt einreichen (Sie brauchen nicht einmal Spring Formular-Tag für dieses einfache Szenario):

<form ...> 
    <c:foreach var = "user" items = "${users}"> 
     <input type = "checkbox" name = "userIds" value = "${user.id}" checked = "checked" /> <c:out value = "${user.firstName}" /> ... 
    </c:foreach> 
    ... 
</form> 

-

@RequestMapping (...) 
public void submitUsers(@RequestParam(value = "userIds", required = false) long[] userIds) 
{ 
    ... 
} 
+1

das 'optional' Attribut in der' @ RequestParam' ist nicht mehr gültig, kann dies durch 'required' ersetzt werden –

1

Wenn eine Seite ein Kontrollkästchen enthält und das zugehörige Formular übermittelt wird, gehen Browser folgendermaßen vor.

  • wenn das Kontrollkästchen aktiviert ist, wird er mit seinen ‚Wert‘ Attribut als der Wert
  • vorgelegt, wenn die checkbos ist nicht geprüft, die Variable überhaupt nicht vorgelegt.

In Ihrem Fall würde ich @RequestParam ändern ("abono") zu @RequestParam (erforderlich = false, value = "abono") und dann überprüfen Sie Ihre Boolean null sein. Wenn es null ist, wurde das Kontrollkästchen vom Benutzer nicht angekreuzt.

+0

Spring * macht * etwas dagegen - siehe http: // stackoverflow .com/questions/8723765/checkbox-values-do-not-bind-in-objekt-when-false # answer-8724006 – reinierpost