在Struts 2中链接访问者验证器

时间:2014-05-08 14:17:49

标签: validation struts2 visitor struts-validation

动作类具有要验证的属性。该属性是一个类(MyClass1),其属性之一也是一个类(MyClass2)。

每个要验证的类都将由多个操作使用,因此我定义了一个" MyClass * -validation.xml"为每个人。

我遇到的问题是尝试使用MyClass1中的访问者验证程序来验证MyClass2。

MyAction-validation.xml中

<validators>
    <field name="class1">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
</validators>

MyClass1的-validation.xml中

<validators>
    <field name="class2">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
</validators>

MyClass2-validation.xml中

<validators>
    <field name="myInt">
        <field-validator type="conversion">
            <message>myInt conversion</message>
        </field-validator>
    </field>
</validators>

如果我提交一个包含字段class1.class2.myInt =&#34; a&#34;的表单,则fieldErrors()不包含转换错误,这是我的期望。

是否可以无限期地链接访问者验证者,或者是最高级别的访问者级别?如果有可能,我做错了什么?


不受欢迎(在我看来)解决方案/解决方法:由于我无法弄清楚我做错了什么,我最终尝试不将MyClass1-validation.xml中的验证链接到MyClass2-validation.xml,而是改变了MyAction-validation.xml的定义:

<validators>
    <field name="class1.class2">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
    <field name="class1">
        <field-validator type="visitor">
            <message></message>
        </field-validator>
    </field>
</validators>

此更改解决了问题(fieldErrors()现在包含转换错误),但我非常希望能够像我最初的意图一样链接验证器。

1 个答案:

答案 0 :(得分:3)

是的,实际上可以无限期地链接 visitors验证器。 conversion验证程序获取完整的字段名称,并检查转换错误映射是否包含该名称。问题是,如果多个链接 visitor验证程序conversion,验证程序无法获取实际的完整字段名称(例如class1.class2.myInt)。

您可以使用visitor文件中的其他验证器(例如MyClass2-validation.xml验证程序)轻松测试int验证程序的链接