我可以在xxxx-validation.xml中为List配置验证吗?

时间:2013-04-20 13:06:23

标签: java struts2

现在在我的保存操作中,我定义了一个名为预订的模型,如下所示:

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的验证?

1 个答案:

答案 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)部分。