JSF 2.0 + Bean验证+一个表单中的更多验证组

时间:2011-08-23 16:32:35

标签: jsf-2 bean-validation validationgroup

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

我想根据“status”属性的值验证具有不同验证组的编辑表单。这可能吗?

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

 @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>

我尝试将<f:validateBean />标记用于dynamicaly set validationGroups属性,但是在检索实际person对象之前调用了返回validationGroups的方法。所以我无法根据Person.status属性决定。

如果人员的状态为“新”,那么可以将PersonNew定义为验证组,否则将PersonActive定义为验证组?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用Hibernate Validator而不是@GroupSequenceProvider看起来应该满足您的需求:

  

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

请参阅official manual