Question

Je suis en train de créer un formulaire pour modifier une ligne de base de données existante. J'utilise la balise form Spring MVC pour lier automatiquement le code HTML à un objet support de forme. La ligne a une relation plusieurs à plusieurs avec une autre table, que je suis en train de représenter avec une boîte de sélection multiple en utilisant le formulaire: balise select;

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

J'utilise Hibernate pour la persistance de sorte que la relation est comme un HashSet représente l'intérieur du POJO Bundle.

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

Sans la boîte de sélection sur la page, l'objet mettra à jour correctement la base de données, mais avec la zone de sélection de l'objet ne sera pas mise à jour de la base de données et je reçois cette erreur dans mon journal log4j, notez que cette erreur n'est pas provoquant une exception, il est visible que dans les journaux;

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

Cela se produit indépendamment de dépérir je désélectionner des éléments dans la boîte de sélection, tout le formulaire refuse de se soumettre correctement. Quelqu'un peut-il me aider?

Je suis conscient de Comment que je lie collection attribue à un formulaire dans Spring MVC , qui est similaire à cette question, malheureusement, aucune des suggestions a semblé utile à mon problème.

Était-ce utile?

La solution

Le problème est avec la soumission de votre formulaire. Le printemps est pas en mesure de lier un objet de la commande, il ne présente pas la forme, mais vous redirige vers la FormView place.

Lorsque la liaison est effectuée avec succès, vous verrez à la place ce message:

No errors -> processing submit

Pour résoudre votre problème, vous devez enregistrer un CustomCollectionEditor avec votre contrôleur. (Voir ce lien ). Ce serait quelque chose comme ceci:

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;
    }
  });
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top