我正在尝试验证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;
}
放入我的模型包中时,问题就消失了。
正确的答案突出显示:
在您的模型类旁边的一个地方管理模型的验证。
答案 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>