现在在我的保存操作中,我定义了一个名为预订的模型,如下所示:
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定义这种配置吗?
零件在列表中,列表是Booking的属性,是否有人可以告诉我是否可以在BookingAction-validation.xml中进行Part的验证?
答案 0 :(得分:1)
您可以使用Visitor Validator;
您应该在<validator type="visitor">
中添加与parts
对象相关的BookingAction-validation.xml
代码段,以激活访问者验证;
然后,您需要在Part-validation.xml
对象的包(而不是Part
对象的包)下创建Action
,并为那里指定单个Part元素的规则。
Struts2 Validation Interceptor
将使用第二个文件来验证List的每个元素。
作为一个不错的副作用,如果在另一个List<Part>
中包含Action
对象,则Part
对象的验证将已存在,无需在另一个文件中重写(您只需要在Action-validation.xml文件中声明验证器代码段。)
修改
您可以指定不同的上下文,通过使用更具体的Bean-context-validation.xml
文件来触发对同一bean的进一步补充验证,仅在某些特定情况下。
阅读this detailed example,尤其是Visitor Validation Example
(及以下Visitor Validation with the Expression Validator
)部分。