2011-08-23 73 views
0

我试图从数据表中选择时编辑实体对象的表单。所以当用户点击datatable中的commandButton时,myBean.person属性被填充适当的人物对象。人有“地位”财产。JSF 2.0 + Bean验证+更多验证组合在一个表格中

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

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

@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集validationGroups属性,但被检索实际的人对象之前被称为是返回validationGroups方法。所以我不能根据Person.status属性来决定。

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

感谢您的任何帮助。

+0

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

回答

0

如果使用Hibernate验证比看起来像@GroupSequenceProvider应该满足您的需求:

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

请参阅official manual