2013-03-15 52 views
2

使用<h:inputXxx validator>屬性和<f:validator>標記有什麼區別?<h:inputXxx驗證程序>屬性和<f:validator>標記之間的區別

<h:inputText ... validator="someValidator"> 
<h:inputText ...> 
    <f:validator validatorId="someValidator" />    

什麼時候應該使用哪一個?

+0

唯一明顯的區別是''validatorId''必須將'Validator'的命名實例作爲獨立類引用。使用'validator',您可以引用驗證器的實例或實現[驗證器方法簽名]的方法(http://docs.oracle.com/javaee/5/api/javax/faces/validator/Validator.html) – kolossus 2013-03-15 12:37:46

回答

3

validator屬性允許你引用一個獨立的託管bean的方法,而不是僅僅驗證ID像這樣:在支撐類一個validate(FacesContext context, UIComponent component, Object value)方法

<h:inputSomething validator="#{bean.validate}" /> 

,而不需要一個Validator實現。

<f:validator>允許您通過validator屬性在輸入上註冊多個驗證器,而不是僅註冊一個驗證器。

使用哪一個取決於具體的功能要求。只需選擇需要最少代碼的應用程序,以最終得到乾淨的代碼。

+0

驗證何時實際發生?當價值改變?如果這樣'value =「true」'永遠不會啓動驗證,對吧? – Inquisitive 2013-03-15 12:49:12

+0

它顯然總會發生。如果您打算僅僅監聽值更改,請使用值更改偵聽器而不是驗證器。 – BalusC 2013-03-15 12:49:55

+0

我從[你的以前的答案](http://stackoverflow.com/a/6282509/1168904)中拿出了這個例子。我沒有得到'value = true'部分的重要性。 – Inquisitive 2013-03-15 12:52:40

0

假設我們在這裏有Spring Configs。

然後在第一種情況下,「fooValidator」將是一個<beanId>,並且將調用相應的類(即驗證程序類)並進行驗證。

在第二種情況下,應該是類似"#{someBean.validationMethod}"。在這種情況下,將會調用驗證方法。

第一個是好方法。因爲在這種情況下,我們的驗證器類擴展了JSF的默認驗證器接口並實現了validate()方法。

其次是好的,如果你想定製驗證過程。

首先會在呈現您的頁面時調用,並且不太確定第二個。但我想,這也是在渲染時調用的。

相關問題