【问题标题】:JSF 2.0 + Bean Validation + More Validation Groups In One FormJSF 2.0 + Bean 验证 + 更多验证组在一个表单中
【发布时间】:2011-08-23 16:32:35
【问题描述】:

当从数据表中选择时,我正在尝试创建用于编辑实体对象的表单。因此,当用户单击数据表中的 commandButton 时,myBean.person 属性将填充适当的人员对象。人具有“状态”属性。

我想根据“状态”属性的值使用不同的验证组来验证编辑表单。这可能吗?

我创建了两个不同的验证组:

 @Entity
    public class Person{
        private String status;
        ...
        @NotNull(message = "{person.null.name}", groups = PersonNew.class)
        private String name;
        @NotNull(message = "{person.null.code}", groups = PersonActive.class)
        private String code;
    }

我想在保存之前验证表单,当状态为“新”时,应该设置name 属性。当状态为“活动”时,应设置code 属性。

我有 jsf 页面:

<h:form id="personEdit">
    <h:inputText value="#{myBean.person.name}" />
    <h:inputText value="#{myBean.person.code}" />
    ... other fields for other properties ...
    <h:commandButton value="Save" action="#{myBean.save}" />
</h:form>

我尝试将&lt;f:validateBean /&gt; 标记与动态设置的validationGroups 属性一起使用,但是在检索到实际人员对象之前调用了返回validationGroups 的方法。所以无法根据Person.status属性决定。

如果个人状态为“新”,是否可以将PersonNew 定义为验证组,否则将PersonActive 定义为验证组?

感谢您的帮助。

【问题讨论】:

  • 我对这个问题的解决方案是手动验证 bean。在“保存”方法中,我可以决定使用哪个验证组并创建验证器来验证给定的 bean。我可以根据返回的约束违规创建人脸消息或实际保存人。

标签: jsf-2 bean-validation validationgroup


【解决方案1】:

如果您使用 Hibernate Validator,那么 @GroupSequenceProvider 应该可以满足您的需求:

@GroupSequence 注释是一个标准化的 Bean 验证注释 [...],它允许您静态地重新定义类的默认组序列。 Hibernate Validator 还提供了一个自定义的非标准化注解 - org.hibernate.validator.group.GroupSequenceProvider - 它允许动态重新定义默认组序列。

official manual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 2015-02-13
    • 2012-01-30
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2015-12-10
    • 2011-04-16
    相关资源
    最近更新 更多