我正在重写旧项目的一部分以使用struts 1 validator framework。
我已经在每个单独的字段上调整了验证规则,并使用了可以在其他形式中重复使用的正则表达式,例如:
<field property="idNumber" depends="mask">
<msg name="mask" key="error.formating.idnumber" />
<arg position="0" value="SearchForm.idNumber" />
<var>
<var-name>mask</var-name>
<var-value>${maskIdNumber}</var-value>
</var>
</field>
还有一个验证需要实现:我需要确保用户在提交之前填写任何字段。查看常见问题解答后,我看到有validwhen
这样的条件可用于相互验证字段,但如果我没有弄错,则必须将其附加到其中一个表单上字段。
如果我写这个:
<field property="idNumber" depends="validwhen">
<msg name="mask" key="error.form.empty" />
<arg position="0" value="SearchForm.idNumber" />
<var>
<var-name>test</var-name>
<var-value>(idNumber != null) or (packageNumber != null)</var-value>
</var>
</field>
只有在字段&#34; idNumber&#34;不是空的吧? FAQ说明了
任何不需要的字段&#39;如果是,将跳过其他验证 field为null或长度为零。
答案 0 :(得分:0)
我尝试过使用validwhen
,但它是在Stuts 1.2中引入的,我在1.1上,所以我得到错误 No ValidatorAction在为字段idNumber 找到时称为有效。< / p>
我可以使用requiredif
但它可能使用我见过的最糟糕的语法。
相反,我遵循了https://stackoverflow.com/a/20086863/113305中的技术,并使用了Struts validator framework
和validate()
方法:
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = super.validate(mapping, request);
if (idNumber.length() < 1 && packageNumber .length() < 1) {
errors.add("emptyForm",
new ActionError("error.form.empty", "emptyForm"));
}
return errors;