5

春のselectタグを使用して、リストに入力する複数のオプションを選択しようとしています。選択タグが適切に表示され、オプションを選択するとリストが正しく更新されます。

私が抱えている唯一の問題は、すでに入力されたリストを使用してforをレンダリングするときに、selectタグが選択されたオプションを強調表示しないことです。デバッグしようとしましたが、リストが空ではないことがわかります。これは、選択したオプションを選択済みとしてマークしていないように見えるタグです。

私のコード:

@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>
4

1 に答える 1

9

選択した製品のリストに、表示されている製品の完全なリストと同じインスタンスが含まれていないことが原因である可能性があります。

タグは製品をと比較し、製品クラスでequals()オーバーライドequals()(および)していません。hashCode()

したがって、選択した製品に「foo」という名前の製品が含まれ、製品の完全なリストに「foo」という名前の製品が含まれている場合でも、それらの製品は等しくないため、Springはそれらが同じ製品であるため、この製品を選択する必要があります。

于 2012-05-28T06:49:59.317 に答える