在XWork验证器中重用正则表达式

时间:2014-06-16 19:25:20

标签: validation struts2 xwork

在没有创建新类并将其添加为验证器类型的情况下,我想在XWork中重用一些正则表达式。

我似乎无法使用正确的语法在线查找教程。我想改变以下内容:

<field name="example">
    <field-validator type="regex">
       <param name="expression">[some ridiculously long regex expression like](0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)</param>
       <message key="example.error" />
    </field-validator>
</field>

类似于:

 <regex-pattern>
   <name>date-regex-pattern</name>
   <expression>[some ridiculously long regex expression like](0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)</expression>
 </regex-pattern>

<field name="example">
    <field-validator type="regex">
       <param name="expression">{date-regex-pattern}</param>
       <message key="example.error" />
    </field-validator>
</field>

或者通过链接其他现有类型在xml中创建一个新的字段验证器类型,例如,具有最小和最大长度的必填字段以及要传递的正则表达式。

XWork中xml和语法的正确位置是什么?

1 个答案:

答案 0 :(得分:1)

将表达式放在由BaseAction中的getter方法公开的String中(所有其他人扩展的Action):

private final static ridiculouslyLongRegexExpression 
                  = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)";

public getRidiculouslyLongRegexExpression(){
    return ridiculouslyLongRegexExpression;
}

然后使用regexExpression从XML文件中调用它:

<field name="example">
    <field-validator type="regex">
        <param name="regexExpression">${ridiculouslyLongRegexExpression}</param> 
    </field-validator>
</field>

有关official documentation的更多信息。