Spring MVC中带有Bean集合的自定义绑定错误消息
问题内容:
我们正在使用Spring MVC 3.0.6,但没有使用JSR
303验证,仅使用处理模型表单bean的Controller方法中使用BindingResult的Binding错误。我将尝试简化以下示例,因为问题不在于如何设计事物,因为那些决定是在我到达之前做出的。我只是想让事情在我拥有的参数范围内正常工作。
在这个特殊的表单中,我正在处理一个表单bean,它是子bean的列表,该视图允许用户添加/删除一堆这些子bean。
表单bean如下所示:
public class FormBean {
private List<SubBean> subBeans;
...
}
和子bean:
public class SubBean {
private Integer value1;
private Date value2;
private String value3;
}
在JSP视图中,我们正在做类似的事情:
<form:form modelAttribute="formBean">
<spring:hasBindErrors name="formBean">
<div class="error-box">
<div class="error-txt">
<form:errors path="*" cssClass="error" />
</div>
</div>
</spring:hasBindErrors>
<c:forEach items="${formBean.subBeans}" var="subBean" varStatus="subBeanStatus">
...
<form:input path="subBeans[${subBeanStatus.index}].value1" />
<form:input path="subBeans[${subBeanStatus.index}].value2" />
<form:input path="subBeans[${subBeanStatus.index}].value3" />
...
</c:forEach>
...
</form:form>
当我提交的表单的值未通过Binding-Mustard时,问题就来了。例如,如果我为value1添加一个无效的int值,则会收到类似以下的错误消息:
Failed to convert property value of type java.lang.String to required type java.lang.Integer for property subBeans[0].value1; nested exception is java.lang.NumberFormatException: For input string: "sdfs"
我知道使用非嵌套bean,您可以简单地将消息添加到Resource Bunder中,形式为:
typeMismatch.beanName.fieldName="This is my custom error message!!!"
但是,像我一样,当拥有列表时,如何控制错误消息?
问题答案:
我解决此问题的方法是添加一条消息,例如“ typeMismatch.fieldName”,基本上只指定结束字段名称,而不指定bean
/列表名称。优点是可以工作,缺点是可以为任何具有相同名称的bean上的所有字段设置消息。因为我们在门户网站上工作,并且在同一WAR中部署了数百个微小的小应用程序,所以这可能是一个问题。目前,它可以工作。