【问题标题】:Cross field validation with Hibernate Validator (3.1.0.GA)使用 Hibernate Validator (3.1.0.GA) 进行跨字段验证
【发布时间】:2011-01-05 14:49:02
【问题描述】:

我们如何使用 hibernate 验证器 3.1.0.GA 执行跨字段验证

创建表用户(id, start_date, end_date, ...) 例如学生的大学毕业完成日期应大于毕业开始日期

我们如何强制执行此操作,以便验证消息可以在保存/更新操作时显示在 UI 中。 UI 使用 JSF、Richfaces 构建

【问题讨论】:

    标签: seam richfaces hibernate-validator


    【解决方案1】:

    您可以通过创建custom validator. 来做到这一点。the documentation 中有更多信息。

    【讨论】:

      【解决方案2】:

      试试这个:

      public class User {
      
        private Date startDate = null;
        private Date endDate = null;
      
        @SuppressWarnings("unused")
        @AssertTrue(message="college graduation finishing date for a student should be greater than the graduation start date")
        private boolean dateValidation() {
          return this.startDate < this.endDate;
        }
      }
      

      【讨论】:

      • 用户界面是使用 Seam / richfaces 构建的,表单验证实际上与字段级验证相关联。因此,我希望 @Entity 类中的某些代码调用此 dateValidation() 方法调用,并希望消息与 endDate 成员变量相关联,因此每当 endDate 小于 startDate 时,消息应该在表单提交的 endDate 字段中显示为验证消息。在上面的 sn-p 中缺少字段级关联,我不知道该怎么做
      • 上述验证确实被触发,但目前它导致用户界面崩溃。目前尚不清楚如何将其与代码中的适当表单变量相关联,以便 Seam 可以显示此消息。
      【解决方案3】:

      Cross field validation with Hibernate Validator (JSR 303)查看我重复的问题(和答案)

      简而言之,创建一个自定义类级别验证器,将类级别 ConstraintViolation 与正在验证的特定字段相关联。

      【讨论】:

      • 我刚刚意识到我错过了标题中的 3.1.0GA。我的解决方案可能无法在 3.1.0 下运行,因为 4.0 在这方面有一些变化。如果我得到它(在其他人之前),我会检查是否是这种情况,并在必要时删除我的答案。
      【解决方案4】:

      对于这种方法

      @SuppressWarnings("unused")
      

      @AssertTrue(message="college graduation finishing date for a student should be greater than the graduation start date") private boolean dateValidation() { return this.startDate < this.endDate; }

      为了有效,它需要符合标准 bean 规范,这意味着 get/set/ 或 "is" 前缀。 isDateValid() 会起作用-

      【讨论】:

      • 我不确定确认 bean 约定是否是这里的问题。验证正在提升,但 Jboss Seam 框架无法捕获类级别验证并将其与用户界面中的 bean 参数相关联。这个问题仍然存在。
      • 解决方法是手动将类级别验证添加到 EntityHome.update / persist 方法
      猜你喜欢
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      相关资源
      最近更新 更多