Frühjahr - beste Weg, um mit der Bindung an eine Liste von beans in einer simpleformcontroller

Ohne darüber nachzudenken, es zu viel, ich habe etwas zu tun, wie die folgenden:

1) bauen Sie eine Liste von SomeBean Objekte auf der Grundlage der Ergebnisse einer Datenbank-Aufruf

2) setzen, dass die Liste in meinem command-Objekt

3) bauen Sie ein Formular basierend auf das command-Objekt können Benutzer Attribute ändern der SomeBeans

4) extrahieren von Daten aus der post-submit-Befehls-Objekt und schreiben der aktualisierten Daten in meine Datenbank

Mein code sieht ungefähr so aus:

public class UpdateThingsinListController extends SimpleFormController {

    protected Object formBackingObject(final HttpServletRequest request)
          throws Exception {

    List<SomeBean> beans = database.getBeans();

    Command comamnd = new UpdateThingsCommand()
    command.setList(beans);

    return command;

  }

   protected ModelAndView onSubmit(final HttpServletRequest request,
          final HttpServletResponse response, final Object commandArg,
          final BindException errors) throws Exception {

    database.setBeans(commandArg.getList());        

   }


}

meine jsp sieht somthething wie:

<form:form>
    <c:forEach var="bean" items="${beans}" varStatus="status">
        <form:checkbox path="beans[${status.index}].someBooleanProperty" />${bean.name} <br>    
    </c:forEach>
</form:form>

Funktioniert der code einwandfrei, aber es ist eben dämmerte mir, dass meine "Bohnen" - Liste wird immer doppelt angelegt (sessionform falsch sein muss-in meinem Fall-wenn bei der Anzeige des Formulars, einmal, als verbindlich an. Wenn sich etwas ändert auf der zweiten Schöpfung (eine Bohne fehlt, sind die Ergebnisse in einer anderen Reihenfolge), meine Bindung wird Durcheinander kommen, und ich werde gefeuert. Ich fange an zu glauben, dass eine verbindliche Regelung, wo ein Befehl-Objekt muss zusammengeführt werden mit einem Formular Vorlage ist sehr riskant.

So, meine Frage ist-wie wollen die Leute sicherstellen, dass die form Einsendungen bekommen gebunden, um die Listen richtig? Gibt es einen anderen Weg, es zu tun, neben der Liste mit index? Objekt-ids vielleicht?

Dank,

-Morgan

  • Ich bin jetzt denken, dass statt einer Liste, ich sollte vielleicht mit einer Karte, also meine checkbox-tag würde wie folgt Aussehen: <form:form> <form:checkbox path="beans[${entry.Schlüssel}].someBooleanProperty" />
InformationsquelleAutor morgancodes | 2009-03-12
Schreibe einen Kommentar