Spring MVC formulario: seleccione la etiqueta, múltiples selecciones no vinculante correctamente?

StackOverflow https://stackoverflow.com/questions/706660

Pregunta

Estoy tratando de crear un formulario para editar una fila de base de datos existente. Estoy utilizando la forma etiqueta Spring MVC para auto unen el html a un objeto de forma de soporte. La fila tiene una relación muchos a muchos con otra mesa, lo que estoy tratando de representar con un cuadro de selección múltiple utilizando el formulario: seleccione la etiqueta;

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

Estoy usando Hibernate para la persistencia de modo que la relación es representar como un HashSet dentro del paquete POJO.

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

Sin el cuadro de selección en la página, el objeto se actualizará la base de datos correctamente, sin embargo, con el cuadro de selección del objeto no se actualizará a la base de datos y estoy recibiendo este error en mi registro de log4j, tenga en cuenta que este error no es causando una excepción, sólo es visible en los registros;

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

Esto sucede independientemente de que se marchitan deseleccionar elementos en el interior del cuadro de selección, todo el formulario se niega a someterse correctamente. ¿Puede alguien ayudarme?

Soy consciente de Cómo hago ato colección atribuye a un formulario en Spring MVC , que es similar a esta pregunta, por desgracia, ninguna de las sugerencias pareció útil a mi problema.

¿Fue útil?

Solución

El problema es con la presentación de su formulario. La primavera no es capaz de unirse a un objeto de la orden, por lo que no presenta el formulario, pero le redirige a la formview lugar.

Cuando se realiza la unión con éxito, verá este mensaje en su lugar:

No errors -> processing submit

Para resolver el problema, tendrá que registrar un CustomCollectionEditor con su controlador. (Ver este enlace ). Sería algo así:

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;
    }
  });
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top