2012-02-23 12 views
5

Estoy creando un formulario en el que el usuario podrá elegir (entre otros) la fábrica de un producto.Spring MVC 3 - etiquetas personalizadas en <form:select>

Cada fábrica está identificada por ID y tiene una dirección específica.

Quiero usar etiqueta personalizada en el siguiente código:

<form:select items="${factories}" path="factory" itemValue="id" itemLabel="..."/> 

Al principio He intentado utilizar la funcionalidad de Primavera formateador (interfaz org.springframework.format.Formatter), pero cuando lo hice, y cuando lo retira atributo "itemLabel" tener que visualiza automáticamente a través del formateador):

<form:select items="${factories}" path="factory" itemValue="id"/> 

pero entonces no estaba seleccionando el valor adecuado si se ha establecido (en el caso de la edición).

Entonces traté de:

<form:select path="factory" itemValue="id"> 
    <c:forEach ...> 
     <form:option value="${factory.id}" label="${factory.address.city} ${factory.address.street}" 
    </c:foreach> 
</form:select> 

Pero como en la primavera anterior solución no estaba seleccionando el valor adecuado que se estableció en el modelo.

Mi pregunta es:

¿Es posible dar formato a la entidad de una manera, que la forma: seleccione funciona correctamente, cuando un valor de campo de selección no es lo mismo que su etiqueta.

Respuesta

5

Tuve el mismo problema, el problema es la forma: el valor de la opción y la etiqueta se asigna directamente a una propiedad en lugar de tener la flexibilidad de especificar jstl.

lo que tiene que la manivela del html, a algo como:

<select name="factory"> 
    <c:forEach var="factory" items="${factories}" > 
     <option value="${factory.id}" label="${factory.address.city} ${factory.address.street}"/> 
    </c:forEach> 
</select> 

primavera recogerá el 'camino' basado en el atributo de nombre ('fábrica' en este caso), ya que intentará y mapee al objeto modelo que está utilizando automáticamente.

Otra forma es agregar otro campo al modelo para concatenar y formatear la etiqueta como lo desee. Y si es un objeto @Entity, haga el campo @Transient.

-1

También puede anular toString() método en la clase de fábrica

@Override 
    public String toString() { 
     return "desired string"; 
} 

Luego, en su JSP

<form:select items="${factories}" itemValue="id" path="factory"/> 
Cuestiones relacionadas