2009-04-01 17 views
6

Estoy intentando crear un formulario para editar una fila de base de datos existente. Estoy usando la etiqueta de formulario Spring MVC para vincular automáticamente el html a un objeto de formulario de respaldo. La fila tiene una relación de muchos a muchos con otra tabla, que intento representar con un cuadro de selección múltiple usando el formulario: seleccionar etiqueta;Spring MVC form: ¿Seleccionar Tag, múltiples selecciones que no se enlazan correctamente?

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

Estoy usando Hibernate para la persistencia, por lo que la relación se representa 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, nota que este error no está causando una excepción, solo 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. ¿Alguien puede ayudarme?

Soy consciente de How do I bind collection attributes to a form in Spring MVC, que es similar a esta pregunta, desafortunadamente ninguna de las sugerencias me pareció útil para mi problema.

+0

Parece que algunos de sus mensajes de error se cortaron - ¿tiene algún otro error? ¿Un rastro de pila? –

+0

Bueno, por alguna razón, el mensaje está en el nivel de depuración. En realidad no es una excepción. Escribí mal cuando mencioné un rastro de pila, lo corregiré ahora. –

Respuesta

8

El problema es con el envío de su formulario. Spring no puede vincular un objeto del comando, por lo que no envía el formulario, sino que lo redirecciona a formView en su lugar.

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

No errors -> processing submit 

para resolver su problema, tendrá que registrar un CustomCollectionEditor con su controlador. (Vea esto link). Sería algo como esto:

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; 
    } 
    }); 
} 
+0

Gracias, desafortunadamente no puedo llegar a wordpress desde el trabajo. Si puede publicar más detalles, lo agradecería. –

+0

Esto es lo que necesitaba hacer. Una vez que implementé su fragmento de código, todo funcionó. ¿Me puede recomendar una buena fuente de aprendizaje para Spring MVC? He estado leyendo la documentación/tutoriales en SpringSource.org y compré el libro Spring In Action, pero ninguno tiene la profundidad que necesito. –

Cuestiones relacionadas