2011-08-23 70 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