Java “春天”;“类型不匹配”;和必填字段

Java “春天”;“类型不匹配”;和必填字段,java,spring-webflow,Java,Spring Webflow,在SpringWebFlow2.0.x的上下文中 我通过在我的消息中使用以下内容来处理表单绑定“类型不匹配”,即尝试将字符串映射到整数字段的结果。属性 typeMismatch={0} contains invalid data. 这个很好用 问题是,如果发生typeMismatch错误的字段是“必需的”,那么我也会收到缺少必需字段的错误,我想这是合乎逻辑的,因为提交的值从未绑定过。(“必需”在Commons验证XML文件中定义) 因此,我不想看到“XXX是必填字段”错误消息,因为该字段只是由

在SpringWebFlow2.0.x的上下文中

我通过在我的
消息中使用以下内容来处理表单绑定“类型不匹配”,即尝试将字符串映射到整数字段的结果。属性

typeMismatch={0} contains invalid data.
这个很好用

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


因此,我不想看到“XXX是必填字段”错误消息,因为该字段只是由于类型不匹配而丢失。我如何解决这个问题?我曾想过在FormAction上重写
initBinder()
,但很快就一事无成了….

您有很多选择,按优先顺序排列:

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

  • 实现您的绑定,以便在绑定步骤之前整数解析失败时可以发送专用消息

  • 创建BindingErrorProcessor以处理不同的


就像Yves提到的那样,在这三种方法中,我使用了一种自定义验证器方法,而且非常简单。您可以使用自定义验证器来检查表单字段是否已经有一条xml错误消息required。如果字段没有错误,则可以检查字符串验证。这样它将只显示一个

您可以使用的另一种方法是尝试多重xml验证,一种是必需的,另一种是检查特定正则表达式的掩码。在您的例子中,如果您的字段是整数字段,那么您可以使用regex执行掩码,只检查数字。xml中掩码的顺序(required或required)决定了哪个消息具有更高的首选项

例如:

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

面具
${somepattern}

这方面有什么进展吗?我目前正在与同样的问题作斗争。你可以发布一个小项目的例子吗?一个正常的链配置是先验证,然后绑定。也许你的邮件被切换了。验证器对他们的邮件使用了“required”资源,所以,我在一个字段的顶部有@required,然后我得到了类型不匹配的验证错误。我如何做到这一点?只显示关于typeMismatch错误的消息,而不显示必需的错误消息?因此,我在持久性类中有一个变量,在整数xy的顶部有注释@NotNull。我给一个字符串,让我们说“foo”并尝试保存。我有两个错误:一个关于类型不匹配,另一个是必填字段。与主要问题完全相同。问题是关于Commons Validator的@Required注释,而不是Hibernate的@NotNull。。。