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

标签 java struts2

现在在我的保存操作中,我定义了一个名为 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/

相关文章:

java - 普通话和粤语是否有单独的 Java 语言环境?

处理文件时的 Java 问题

java - 如何根据日期和时间自动运行特定的代码块?

hibernate - Struts2警告: Could not find property

java - Struts2 中的属性文件位置

java - 斐波那契迭代法 - java

Java日期格式

Java - 在多个线程的缓存中保存变量

java - <s :select> with dynamic list name

java - 如何读取 XML 中的特定标签