2

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

零件在列表中,并且列表是 Booking 的财产,有人可以告诉我是否可以在 BookingAction-validation.xml 中验证零件吗?

4

1 回答 1

1

您可以使用访客验证器

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

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

Struts2 Validation Interceptor将通过使用第二个文件来验证列表的每个元素。

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


编辑

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

阅读这个详细的例子,尤其是Visitor Validation Example(和以下Visitor Validation with the Expression Validator)部分。

于 2013-04-21T12:47:20.360 回答