我正在重写旧项目的部分内容,以使用struts 1验证器框架。
我已经调整了每个单独字段的验证规则,使用可以以其他形式重用的正则表达式,例如:
<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>
还有一个验证需要实现:我需要确保用户在提交之前已经填写了任何字段。查看FAQ,我发现有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>
只有当字段"idNumber"不为空时才会尝试测试,对吗?常见问题说明
任何不是'必需'的字段将跳过其他验证字段为空或长度为零。
我尝试过使用validwhen
,但它是在Stuts 1.2中引入的,我在1.1上,所以我得到错误No ValidatorAction called validwhen for field idNumber。
我可以使用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;