2010-09-02 41 views
11

在Spring Webflow的2.0.x版本的上下文......春“typemismatch”和所需的字段

予处理形式结合“typemismatches”,即作为试图字符串映射到整数的结果场,通过在我messages.properties

typeMismatch={0} contains invalid data. 

下也能正常工作。

问题是,如果typeMismatch错误发生的字段是“必需的”,那么我还会收到一个错误,提示缺少必填字段,这是逻辑推测,因为提交的值永远不会绑定。 (“必需的”,在下议院验证XML文件中定义)

所以,我不希望看到的“是必需XXX场”错误消息时,现场仅因typeMismatch失踪。我该如何解决这个问题?我想到了在FormAction覆盖initBinder()但很快就无处.....

+1

对此有何进展?我目前正在与同一问题作斗争。 – 2012-02-16 00:45:18

+0

你可以发布一个小项目的例子吗? – 2012-03-13 08:35:18

回答

1

你有很多选择,按优先顺序:

  • 设置选择性消息typeMismatch.target.yourFieldNametypeMismatch.int资源文件

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

  • 创建BindingErrorProcessor像伊夫提到处理不同kind of parsing issues

+0

这是否解决了不显示两条错误消息的问题? – mico 2012-03-13 10:17:59

+0

正常链配置首先是验证程序,然后是绑定。也许你的交换。 – 2012-03-13 10:42:36

+0

验证程序对他们的消息使用了“required”资源 – 2012-03-13 10:44:05

2

,这三种方法中,我使用了一个自定义的验证方法和其非常容易。您可以使用自定义验证器来检查表单字段是否已经有必需的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>