2012-05-28 7 views
5

Estoy tratando de usar la etiqueta de selección de primavera para seleccionar múltiples opciones para completar una lista. Mis etiquetas de selección se muestran bien y cuando selecciono opciones, la Lista se actualiza correctamente.Spring select multiple tag and binding

El único problema que tengo es cuando renderizo el con una lista ya llena, mi etiqueta de selección no resalta las opciones seleccionadas. He intentado depurar y puedo ver que la Lista no está vacía, es realmente la etiqueta que parece no marcar las opciones seleccionadas como seleccionadas.

Mi código:

@Entity 
public class ProductsGroup 
{ 
    @Version @Column(name = "version") 
    private Integer version; 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") 
    private Integer id; 

    @ManyToMany(fetch = FetchType.EAGER) 
    private List<Product> products; 

    public List<Product> getProducts() 
    { 
     return products; 
    } 

    public void setProducts(List<Product> products) 
    { 
     this.products = products; 
    } 
} 

@Entity 
public class Product 
{ 
    @Version @Column(name = "version") 
    private Integer version; 

    @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") 
    private Long id; 

    private String name; 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 
} 

<form:form action="${action}" class="fancyform" commandName="productsGroup" id="productForm"> 
    .... 
    <form:select path="products" items="${products}" itemLabel="name" itemValue="id" multiple="true"/> 
    .... 
</form:form> 

Respuesta

8

Es probablemente debido al hecho de que la lista de productos seleccionados no contiene las mismas instancias como la lista completa de los productos expuestos.

La etiqueta compara productos con equals(), y no ha anulado equals() (y hashCode()) en su clase de Producto.

Entonces, incluso si los productos seleccionados contienen el Producto con el nombre "foo", y la lista completa del Producto también contiene un Producto con el nombre "foo", esos productos no son iguales, y Spring no sabe son el mismo producto, y que este producto debe ser seleccionado.

+0

¡Impresionante! ¡Estaba pensando que estaba usando el itemValue para comparar! De hecho, usar iguales tiene más sentido ... – tibo

Cuestiones relacionadas