Spring MVC 3.0.6を使用していますが、JSR 303検証は使用しておらず、モデルフォームBeanを処理するControllerメソッドでBindingResultを使用したBindingエラーのみを使用しています。到着前に決定が下されたため、問題は物事がどのように設計されているかではないため、以下の例を簡略化してみます。私は自分が持っているパラメータの範囲内で物事を正しく機能させようとしているだけです。
私が取り組んでいるこの特定のフォームには、サブBeanのリストであるフォームBeanがあり、ユーザーがこれらのサブBeanの束を追加/削除できるようになっています。
フォームBeanは次のようになります。
public class FormBean {
private List<SubBean> subBeans;
...
}
そしてサブビーン:
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の場合、次の形式でResourceBunderにメッセージを追加するだけで済みます。
typeMismatch.beanName.fieldName="This is my custom error message!!!"
しかし、私と同じように、リストがある場合、どのようにエラーメッセージを制御しますか?