Struts2列表验证

时间:2012-01-19 03:43:05

标签: xml validation struts2 annotations

我正在尝试验证Struts2上的对象列表。

假设您有一个名为INVOICE的班级。 它有3个属性:product, quantity, price

我有一个名为INVOICE的{​​{1}}列表。

在jsp文件中,如果遍历列表,它将生成这些输入。

INVOICES

提交后,我需要验证这些值。

如您所见,Struts2不再支持集合验证。 http://www.opensymphony.com/webwork/api/com/opensymphony/xwork/validator/validators/CollectionFieldValidator.html

我找到了一种用注释做的方法。像

这样的东西
invoices[0].product
invoices[0].quantity
invoices[0].price
invoices[1].product
invoices[1].quantity
invoices[1].price 

但由于项目的编码标准,我不允许在bean类上放置验证注释。因为我需要在属性文件上保留MESSAGES。

我读到我可以使用VisitorValidation进行此验证,如此处所述。 http://struts.apache.org/2.0.11.2/docs/using-visitor-field-validator.html

但是通过查看这些例子,我无法理解如何做到这一点。

有没有办法只使用验证XML?谢谢

解答:

我是使用VisitorFieldValidator完成的,当我评论正确答案时,我仍然遇到问题。

当我将@RequiredStringValidator(message="Product name is required") public void setProduct(String product) { this.product = product; } 放入我的模型包中时,问题就消失了。

正确的答案突出显示:

在您的模型类旁边的一个地方管理模型的验证。

1 个答案:

答案 0 :(得分:2)

确实,访客现场验证将是您的赌注。 Struts2文档并不是最全面的,但您可以获得有关访问者字段验证器here的更多信息,其中包含一个简单示例。

  

VisitorFieldValidator允许您使用对象自己的验证文件将验证转发到操作的对象属性。这允许您使用ModelDriven开发模式,并在模型类旁边的一个地方管理您的模型验证。 VisitorFieldValidator可以处理简单的Object属性,对象集合或Arrays。

在您的操作中,您可以将invoices集合的验证放置为:

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

然后只需继续创建一个Invoice-validation.xml,它将保存Invoice bean的验证逻辑,并将其与Invoice类一起放置。例如:

<validators>
    <field name="product">
        <field-validator type="requiredstring">
            <message>product is required.</message>
        </field-validator>
    </field>
</validators>