Spring“typemismatch”和必填字段

时间:2010-09-02 15:10:27

标签: java spring-webflow

在Spring Webflow 2.0.x的上下文中......

我处理表单绑定“typemismatches”,即尝试将String映射到Integer字段,在messages.properties

中使用以下内容
typeMismatch={0} contains invalid data.

这很好用。

问题是,如果发生typeMismatch错误的字段是“必需”,那么我还会收到缺少的必填字段的错误,这是合乎逻辑的我猜是因为提交的值从未绑定。 (“必需”在Commons Validation XML文件中定义)

因此,当字段仅因typeMismatch而丢失时,我不希望看到“XXX is required field”错误消息。我该如何解决这个问题?我考虑过在FormAction上覆盖initBinder(),但很快就没有了......

2 个答案:

答案 0 :(得分:2)

与Yves提到的一样,在这三种方法中,我使用了自定义验证器方法,非常简单。您可以使用自定义验证程序检查表单字段是否已包含所需的xml错误消息。如果该字段没有错误,那么您可以检查字符串验证。这样它只会显示一个。

您可以使用的另一种方法是尝试多个xml验证,一个是必需的,另一个是检查特定正则表达式的掩码。在您的情况下,如果您的字段是整数字段,那么您可以使用正则表达式仅检查数字来执行掩码。 xml中掩码,必需或必需掩码的顺序决定哪个消息获得更高的首选项。

例如:

<field property="somefield" depends="required,mask" page="2">
<arg key="somelabel"/>
<var>
    <var-name>mask</var-name>
    <var-value>${somepattern}</var-value>
</var>
</field>

答案 1 :(得分:1)

根据偏好,您有很多选择:

  • 在资源文件中有选择地设置消息typeMismatch.target. yourFieldName typeMismatch.int

  • 实施own Validator,以便在绑定步骤之前整数解析失败时发送专用消息

  • 创建一个BindingErrorProcessor来处理不同的kind of parsing issues