Struts 2.5.12 / 2.5.13 - struts升级后验证停止工作

时间:2017-10-30 12:11:59

标签: struts2 struts-validation

我已经将项目之一的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方法操作类中没有看到任何字段错误。

有谁知道升级后我为什么会遇到这个问题?感谢

1 个答案:

答案 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>

不确定为什么其他验证不能与错误的正则表达式一起使用,但在更改之后所有验证都有效。

这可能有助于可能遇到类似问题的人:)