Spring MVC formulario: seleccione la etiqueta, múltiples selecciones no vinculante correctamente?
-
22-08-2019 - |
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.
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;
}
});
}