Frage

Ich versuche, ein Formular zu erstellen, eine vorhandene Datenbankzeile zu bearbeiten. Ich bin mit der Spring MVC Form-Tag Auto der HTML zu einem Formular Träger Objekt binden. Die Reihe hat ein vieles zu viel Beziehung mit einem anderen Tisch, die ich mit einem Mehrfachauswahlfeld mit der Form darzustellen versuchen: select-Tag;

<form:select path="rules">
    <form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>

ich Hibernate für die Persistenz bin mit so das Verhältnis innerhalb des Bundle pojo repräsentieren als HashSet ist.

 private Set<Rule> rules = new HashSet<Rule>(0);

Ohne das Auswahlfeld auf der Seite, wird das Objekt in der Datenbank aktualisieren korrekt, jedoch mit der Auswahlbox wird das Objekt nicht in die Datenbank aktualisieren und ich erhalte diesen Fehler in meinem log4j Log, beachten Sie, dass dieser Fehler nicht eine Ausnahme verursacht, es ist nur sichtbar, in den Protokollen;

DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1

Dies geschieht unabhängig von welke ich Elemente in dem Auswahlkästchen deaktivieren, verweigert das gesamte Formular korrekt einzureichen. Kann mir jemand helfen?

Ich bin mir dessen bewusst Wie ich binden Sammlung in eine Form, in Spring MVC Attribute, die auf diese Frage ähnlich ist leider keiner der Vorschläge nützlich für mein Problem zu sein schien.

War es hilfreich?

Lösung

Das Problem ist mit der Einreichung des Formulars. Der Frühling ist nicht in der Lage, ein Objekt des Befehls zu binden, so dass es nicht das Formular abzuschicken, sondern leitet Sie auf die Formview statt.

Wenn die Bindung erfolgreich durchgeführt wird, wird diese Meldung angezeigt, statt:

No errors -> processing submit

Ihr Problem zu lösen, benötigen Sie einen CustomCollectionEditor mit dem Controller zu registrieren. (Sehen Sie diese Link ). Es wäre so etwas wie dies:

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{   
  binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class)
  {
    protected Object convertElement(Object element)
    {
        String name = "";

        if (element instanceof String)
            name = (String) element;

        return name != null ? new Rule(name) : null;
    }
  });
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top