在我的 Spring MVC 项目中,我有一个 Class1 的更新页面,它必须显示绑定到 Class1 上的实体集合的 form:checkbox 标记列表。
类1.java:
class Class1 {
private Set<Class2> set;
//... other fields
}
在 updateclass1.jspx 中:
<c:forEach items="${allClass2Instances}" var="class2">
<form:checkbox label="${class2.name}" path="set" value="${class2}"/><br/>
</c:forEach>
使用上面的复选框标记,当我显示页面时,如果 Class2 实例是 class1 上的 Set 的一部分,则勾选复选框,如果不是,则取消勾选。但是当我点击提交时,我收到以下错误:
Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.Set' for property 'set'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "Name 1" from type 'java.lang.String' to type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "Name1"
据我所知,何时填充页面,form:checkbox 标记需要一个实例来设置正确的选中/未选中值,但是在提交时,JSP 正在将一个 class2.toString() 值数组发送到期望的转换器标识。相反,当我将标签更改为以下内容时:
<form:checkbox label="${class2.name}" path="set" value="${class2.id}"/><br/>
绑定工作正常,但是当我查看更新页面时,复选框未正确勾选/取消勾选,因为标签不知道传入的值是对象 ID。
提交后如何使绑定与复选框标签的预期一致?
万一这很重要 - 这一切都在 Roo 生成的脚手架页面内。