简体   繁体   English

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

[英]Struts 2.5.12 / 2.5.13 - Validations stopped working after struts upgrade

I have upgraded Struts on one of the project from 2.3.x to 2.5.12 (tried with 2.5.13 also) and I see that after this upgrade no validations happening.我已经将其中一个项目的 Struts 从 2.3.x 升级到 2.5.12(也尝试了 2.5.13),我看到在这次升级之后没有进行验证。

I have in JSP:我在 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>

Action name is TestStrutsAction.java .动作名称是TestStrutsAction.java My validation xml TestStrutsAction-validation.xml looks like:我的验证 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>

I have overridden validate in my action class as:我在我的动作类中将验证覆盖为:

@Override
public void validate() {
    super.validate();
    LOG.debug(getFieldErrors());
}

I tried debugging and I do not see any field errors in the validate method of action class.我尝试调试,但在操作类的validate方法中没有看到任何字段错误。

Does anyone know why I have this issue after upgrade?有谁知道为什么我升级后会出现这个问题? Thanks谢谢

The issue was with the regular expression used in the validation xml file.问题在于验证 xml 文件中使用的正则表达式。 I have a regex in validation xml as:我在验证 xml 中有一个正则表达式:

<field-validator type="regex">
   <param name="expression"><![CDATA[^[0-9A-Za-z&\-./\s]*$]]></param> 
   <message key="fullname.invalid"/>
</field-validator>

I changed expression to regexExpression as below and it started working.我将expression更改为regexExpression ,如下所示,它开始工作。

<field-validator type="regex">
   <param name="regexExpression"><![CDATA[^[0-9A-Za-z&\-./\s]*$]]></param> 
   <message key="fullname.invalid"/>
</field-validator>

Not sure why other validations didn't work with the wrong regex, but after changing it all the validations are working.不知道为什么其他验证不能使用错误的正则表达式,但是在更改它之后所有验证都可以正常工作。

This might help someone who may have similar issue :)这可能会帮助可能有类似问题的人:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM