${products}
包含List<Product>
。 Product
是@Entity
,其equals
方法与id
进行比较。没有为Product
注册转换器或格式化程序(除了Spring Data&#39; DomainClassConverter
,但似乎没有为此案例启动):
这有效:
<form:select path="productFrom">
<form:option value="" label="-" />
<form:options items="${products}" itemValue="id" itemLabel="name"/>
</form:select>
这(选择组需要,但在此处简化)不会选择正确的值:
<form:select path="productFrom">
<form:option value="" label="-" />
<c:forEach items="${products}" var="product">
<form:option value="${product.id}">${product.name}</form:option>
</c:forEach>
</form:select>
调试SelectedValueComparator
后,我发现它尝试将candidateValue
类型Long
与boundValue
String
进行比较。我可以通过在产品中创建toString()
方法来解决此问题,该方法将id
作为String
返回。 (或者我可以修改equals()
方法来处理Long
。)
尽管如此,我还是觉得我在这里做错了。
答案 0 :(得分:0)
最后,我通过向Product
添加新方法解决了这个问题:
public String getIdString() {
return id == null ? "" : id.toString();
}
并更改选项定义:
<form:option value="${product.idString}">${product.name}</form:option>
仍然不确定我是以正确的方式做到这一点,任何提示都表示赞赏。