现在在我的保存操作中,我定义了一个名为 booking 的模型,如下所示:
Class BookingAction {
private Booking booking;
...
}
Class Booking {
private String bookingNo;
private String status;
...
private List<Part>parts = new ArrayList<Part>();
...
}
Class Part {
private String partNo;
...
}
我还为该操作定义了一个验证 xml 文件,例如
<validators>
<field name="booking.status">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("MandatoryFieldEmpty",{"%{getText(\"BookingMain.status\")}"})}</message>
</field-validator>
</field>
<field name="booking.bookedBy">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("MandatoryFieldEmpty",{"%{getText(\"BookingMain.bookedBy\")}"})}</message>
</field-validator>
</field>
....
我也可以为 Part 定义这种配置吗?
Part 在列表中,List 是 Booking 的属性,有人能告诉我是否可以在 BookingAction-validation.xml 中进行 Part 的验证吗?
最佳答案
您可以使用 Visitor Validator ;
您应该添加 <validator type="visitor">
与 parts
相关的片段在你的对象 BookingAction-validation.xml
激活访问者验证;
然后,您需要创建一个 Part-validation.xml
包下Part
对象(而不是 Action
对象的包),并在那里指定单个 Part 元素的规则。
Struts2 Validation Interceptor
将使用第二个文件负责验证列表的每个元素。
作为一个很好的副作用,如果你包含一个 List<Part>
另一个对象 Action
,您对 Part
的验证对象将已经存在,无需在另一个文件中重写它(您只需要在 Action-validation.xml 文件中声明验证程序片段)。
编辑
您可以通过使用更具体的 Bean-context-validation.xml
来指定不同的上下文来触发对同一 bean 的进一步补充验证。文件,仅在某些特定情况下。
阅读this detailed example ,尤其是 Visitor Validation Example
(以及以下 Visitor Validation with the Expression Validator
)部分。
关于java - 我可以在 xxxx-validation.xml 中为列表配置验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120718/