使用<h:inputXxx validator>
屬性和<f:validator>
標記有什麼區別?<h:inputXxx驗證程序>屬性和<f:validator>標記之間的區別
<h:inputText ... validator="someValidator">
<h:inputText ...>
<f:validator validatorId="someValidator" />
什麼時候應該使用哪一個?
使用<h:inputXxx validator>
屬性和<f:validator>
標記有什麼區別?<h:inputXxx驗證程序>屬性和<f:validator>標記之間的區別
<h:inputText ... validator="someValidator">
<h:inputText ...>
<f:validator validatorId="someValidator" />
什麼時候應該使用哪一個?
的validator
屬性允許你引用一個獨立的託管bean的方法,而不是僅僅驗證ID像這樣:在支撐類一個validate(FacesContext context, UIComponent component, Object value)
方法
<h:inputSomething validator="#{bean.validate}" />
,而不需要一個Validator
實現。
<f:validator>
允許您通過validator
屬性在輸入上註冊多個驗證器,而不是僅註冊一個驗證器。
使用哪一個取決於具體的功能要求。只需選擇需要最少代碼的應用程序,以最終得到乾淨的代碼。
驗證何時實際發生?當價值改變?如果這樣'value =「true」'永遠不會啓動驗證,對吧? – Inquisitive 2013-03-15 12:49:12
它顯然總會發生。如果您打算僅僅監聽值更改,請使用值更改偵聽器而不是驗證器。 – BalusC 2013-03-15 12:49:55
我從[你的以前的答案](http://stackoverflow.com/a/6282509/1168904)中拿出了這個例子。我沒有得到'value = true'部分的重要性。 – Inquisitive 2013-03-15 12:52:40
假設我們在這裏有Spring Configs。
然後在第一種情況下,「fooValidator」將是一個<beanId>
,並且將調用相應的類(即驗證程序類)並進行驗證。
在第二種情況下,應該是類似"#{someBean.validationMethod}"
。在這種情況下,將會調用驗證方法。
第一個是好方法。因爲在這種情況下,我們的驗證器類擴展了JSF的默認驗證器接口並實現了validate()方法。
其次是好的,如果你想定製驗證過程。
首先會在呈現您的頁面時調用,並且不太確定第二個。但我想,這也是在渲染時調用的。
唯一明顯的區別是''validatorId''必須將'Validator'的命名實例作爲獨立類引用。使用'validator',您可以引用驗證器的實例或實現[驗證器方法簽名]的方法(http://docs.oracle.com/javaee/5/api/javax/faces/validator/Validator.html) – kolossus 2013-03-15 12:37:46