我已经将项目之一的Struts从2.3.x升级到2.5.12(也尝试使用2.5.13),我发现在升级之后没有发生任何验证。
我在JSP中:
<s:form action="details">
<s:textfield name="fullName" size="20" label="full.name" requiredLabel="true" />
<s:checkbox id="terms" name="terms" requiredLabel="true" />
<s:submit name="submit" id="submit" value="Submit" />
</s:form>
动作名称为TestStrutsAction.java
。我的验证xml TestStrutsAction-validation.xml
如下所示:
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="fullName">
<field-validator type="requiredstring">
<message key="fullname.error"/>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^[0-9A-Za-z&\-./\s]*$]]></param>
<message key="fullname.invalid"/>
</field-validator>
</field>
<field name="terms">
<field-validator type="fieldexpression">
<param name="expression">terms eq true</param>
<message key="terms.error"/>
</field-validator>
</field>
</validators>
我在我的动作类中覆盖了验证:
@Override
public void validate() {
super.validate();
LOG.debug(getFieldErrors());
}
我尝试过调试,但在validate
方法操作类中没有看到任何字段错误。
有谁知道升级后我为什么会遇到这个问题?感谢
答案 0 :(得分:1)
问题在于验证xml文件中使用的正则表达式。 我在验证xml中有一个正则表达式:
<field-validator type="regex">
<param name="expression"><![CDATA[^[0-9A-Za-z&\-./\s]*$]]></param>
<message key="fullname.invalid"/>
</field-validator>
我将expression
更改为regexExpression
,如下所示,它开始有效。
<field-validator type="regex">
<param name="regexExpression"><![CDATA[^[0-9A-Za-z&\-./\s]*$]]></param>
<message key="fullname.invalid"/>
</field-validator>
不确定为什么其他验证不能与错误的正则表达式一起使用,但在更改之后所有验证都有效。
这可能有助于可能遇到类似问题的人:)