Domanda

Sto cercando di creare un form per modificare una riga di database esistente. Sto usando il modulo di tag Spring MVC per l'auto associare il codice HTML in un oggetto modulo di supporto. La fila ha una relazione molti a molti relazione con un altro tavolo, che sto cercando di rappresentare con una casella di selezione multipla utilizzando il modulo: tag select;

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

Sto usando Hibernate per la persistenza in modo che il rapporto è rappresentare come un HashSet all'interno del POJO Bundle.

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

Senza la casella di selezione sulla pagina, l'oggetto verrà aggiornato per il database in modo corretto, ma con la casella di selezione l'oggetto non verrà aggiornato per il database e sto ottenendo questo errore nel mio ceppo log4j, notare che questo errore non è causando un'eccezione, è visibile solo nei registri;

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

Questo avviene indipendentemente dal appassire I deselezionare le voci all'interno della casella di selezione, l'intera forma si rifiuta di inviare correttamente. Qualcuno mi può aiutare?

Sono a conoscenza di Come faccio mi legano raccolta attribuisce a un form in Spring MVC , che è simile a questa domanda, purtroppo, nessuno dei suggerimenti sembrato utile al mio problema.

È stato utile?

Soluzione

Il problema è con la presentazione del modulo. Primavera non è in grado di legare un oggetto del comando, in modo da non inviare il modulo, ma reindirizza alla formview invece.

Quando viene eseguita con successo l'associazione, si vedrà questo messaggio invece:

No errors -> processing submit

Per risolvere il problema, è necessario registrare un CustomCollectionEditor con il controller. (Vedere questo link ). Sarebbe qualcosa di simile:

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;
    }
  });
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top