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



现在在我的保存操作中,我定义了一个名为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定义这种配置吗?

部分是在一个列表和列表是预订的属性,有没有人可以告诉我,如果我可以有部分的验证在BookingAction-validation.xml?

您可以使用访问者验证器;

您应该在您的BookingAction-validation.xml中添加与parts对象相关的<validator type="visitor">片段,以激活访问者验证;

然后,您需要在Part Object的包下创建一个Part-validation.xml (而不是Action Object的包),并在那里指定单个Part元素的规则。

Struts2 Validation Interceptor将使用第二个文件来验证List中的每个元素。

作为一个很好的副作用,如果您在另一个Action中包含List<Part>对象,那么您对Part对象的验证将已经存在,无需在另一个文件中重写它(您只需要在您的Action-validation.xml文件中声明验证器片段)。


编辑

您可以指定不同的上下文,通过使用更具体的Bean-context-validation.xml文件来触发对同一bean的进一步的补充验证,但仅在某些特定情况下如此。

阅读这个详细的例子,特别是Visitor Validation Example(以及下面的Visitor Validation with the Expression Validator)部分。

最新更新