Spring选择多个标记和绑定

Spring选择多个标记和绑定,spring,jsp,spring-mvc,Spring,Jsp,Spring Mvc,我试图使用spring的select标记选择多个选项来填充列表。 我的选择标签显示良好,当我选择选项时,列表会正确更新 我唯一的问题是,当我使用已填充的列表渲染for时,我的选择标记不会高亮显示选定的选项。我试着调试,我可以看到列表不是空的,实际上是标签似乎没有将所选选项标记为选中 我的代码: @Entity public class ProductsGroup { @Version @Column(name = "version") private Integer versi

我试图使用spring的select标记选择多个选项来填充列表。 我的选择标签显示良好,当我选择选项时,列表会正确更新

我唯一的问题是,当我使用已填充的列表渲染for时,我的选择标记不会高亮显示选定的选项。我试着调试,我可以看到列表不是空的,实际上是标签似乎没有将所选选项标记为选中

我的代码:

@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>
@实体
公共类产品组
{
@Version@Column(name=“Version”)
私有整数版本;
@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name=“Id”)
私有整数id;
@ManyToMany(fetch=FetchType.EAGER)
私人上市产品;
公共列表产品()
{
退货产品;
}
公共产品(列出产品)
{
这一点。产品=产品;
}
}
@实体
公共类产品
{
@Version@Column(name=“Version”)
私有整数版本;
@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name=“Id”)
私人长id;
私有字符串名称;
公共字符串getName()
{
返回名称;
}
公共void集合名(字符串名)
{
this.name=名称;
}
}
....
....

这可能是因为所选产品列表中包含的实例与所显示产品的完整列表中的实例不同

标记将产品与
equals()
进行比较,并且您没有在产品类中重写
equals()
(和
hashCode()


因此,即使选定的产品包含名为“foo”的产品,并且完整的产品列表也包含名为“foo”的产品,这些产品并不相等,因此Spring不知道它们是同一产品,因此应该选择此产品。

Awesome!我在想,它是在使用itemValue进行比较!事实上,使用equals更有意义。。。