JSF Validator入門基礎篇 - JSF Validator的介紹與使用
JSF框架提供Validator機制,對用戶輸入值的合法性進行驗證。若用戶輸入值無效,還提供了錯誤消息顯示功能,以幫助用戶能正確輸入。
在開始本文之前,建議閱讀下面的文章:
深入了解JSF
深入了解JSF(二):從JSF的Lifecycle看JSF對頁面的處理機制和流程
以了解JSF的概念等。
JSF Validator圖:

輸入數據的驗證放在服務器端進行。
需要驗證輸入值的組件(輸入組件)在JSP里通過JSF標簽加以設置,方法簡單直觀。
每個輸入組件可以同時綁定多個Validator。
驗證發生錯誤時,可以向FacesContext登錄錯誤信息,并且可以通過JSP直接顯示。顯示風格與位置可以自由設定。
驗證錯誤時,JSF的生命周期控制機制自動中止處理流程,跳轉到畫面描畫階段(Render Response Phase)。
JSF標準提供對數值(long, double)的最大最小值驗證,文字列的最大最小長度驗證,以及必須(required)驗證等Validator。
支持用戶自定義Validator。用戶自定義Validator的方法有2種,一種是Method Validator,一種是實現javax.faces.validator.Validator接口。本文的后面將對其作詳細介紹。
Validator標簽名:f:validateDoubleRange標簽。
屬性名:
maximum="最大值"
minimum="最小值"
Validator ID:javax.faces.DoubleRange
Validator 類:javax.faces.validator.DoubleRangeValidator
輸入值的范圍驗證。
輸入值必須為Number(數值)類型或者可以轉換為Double類型的值
Validator標簽名:f:validateLongRange
屬性名:
maximum="最大值"
minimum="最小值"
Validator ID:javax.faces.LongRange
Validator 類:javax.faces.validator.LongRangeValidator
輸入值的范圍驗證。
輸入值必須為Number(數值)類型或者可以轉換為Long類型的值
Validator標簽名:f:validateLength
屬性名:
maximum="最大值"
minimum="最小值"
Validator ID:javax.faces.Length
Validator 類:javax.faces.validator.LengthValidator
輸入值的長度驗證。
輸入值必須為String(字符串)或者可以轉換為String類型的值
JSF required(必須輸入) Validator
JSF的幾個輸入組件還可以使用required屬性簡單地驗證表單元素是否得到輸入。
<h:inputHidden required="true/false"></h:inputHidden>
<h:inputSecret required=“true/false”></h:inputSecret>
<h:inputText required=“true/false”></h:inputText>
<h:inputTextarea required=“true/false”></h:inputTextarea>
<h:selectBooleanCheckbox required=“true/false”></h:selectBooleanCheckbox>
<h:selectManyCheckbox required=“true/false”></h:selectManyCheckbox>
<h:selectManyListbox required=“true/false”></h:selectManyListbox>
<h:selectManyMenu required=“true/false”></h:selectManyMenu>
<h:selectOneListbox required=“true/false”></h:selectOneListbox>
<h:selectOneMenu required=“true/false”></h:selectOneMenu>
<h:selectOneRadio required=“true/false”></h:selectOneRadio>
JSF支持Method級別的Validator,這種Validator實現起來比較簡單,可以在任何JSF的managed-bean里實現一個類似以下的方法:
其中,context變量為JSF容器上下文環境,component為 綁定的組件,value為組件的輸入值。validateXxxx可以為任意你喜歡的方法名。與預期的輸入值不符合的話,可以通過throw一個 ValidatorException。"some message"便是想要顯示的錯誤消息。
然后在JSP中:
便可。
錯誤消息的顯示稍后再作介紹。
Validator標簽可以接收參數,所以功能上比較強大,也比較靈活。同時,除了使用JSF標準的Validator標簽之外,你還可以自定義Validator標簽。關于自定義Validator標簽我們將在另外的文章中加以介紹。
Validator標簽的使用例:
上 例對id為xxxxValue的輸入框組件的輸入值做double范圍驗證,指定范圍最大值為5。超過5的情況則顯示錯誤消息,錯誤消息可以使 用<h:message />或者<h:messages />標簽顯示。有關消息處理的詳細介紹請參考:
JSF全面理解之消息處理
一文
除了以上2種驗證方法之外,還可以使用f:validator標簽對輸入值加以驗證。f:validator標簽需要指定validatorId屬性,Validator Id需要在faces-config.xml配置文件中加以配置。
f:validator標簽的使用例:
"Some Validator ID"為具體的Validator ID,我們將在自定義Validator標簽一文中對Validator ID做詳細介紹。
JSF框架將調用指定Validator ID所對應的Validator的
public void validate(FacesContext context, UIComponent component, Object value)
方法。
跟Method Validator一樣,不能f:validator標簽傳入參數。
本文介紹了JSF Validator的機制,特點,種類,以及使用方法等。我們將在近期其它文章中介紹怎么自定義Validator。
在 JSF Validator入門基礎篇 - JSF Validator的介紹與使用 一文中我們介紹了JSF Validator的機制,特點,種類,以及使用方法等。
本文將介紹怎么自定義Validator和Validator標簽。
自定義Validator有2種方法:一種是Method Validator,我們在JSF Validator入門基礎篇 - JSF Validator的介紹與使用 一文中已作了介紹,這里不再詳述;另一種是通過實現Validator接口,也就是使用自定義的Validator類。
自定義Validator類與Validator標簽有以下幾個步驟:
自定義Validator類的實現
faces-config.xml登錄
自定義Validator標簽類
設置TLD文件
MyValidator.java
faces-config.xml
經過上面2個步驟,就可以使用MyValidator了。
例:
<h:inputText id="xxxxValue" value="#{mybean.xxxxValue}">
<f:validator validatorId="MyValidator"></f:validator>
</h:inputText>
MyValidatorTag.java
另外,為MyValidator.java加入相應參數及方法實現。
MyValidator.tld
web.xml
JSP
深入了解JSF
深入了解JSF(二):從JSF的Lifecycle看JSF對頁面的處理機制和流程
以了解JSF的概念等。
JSF Validator圖:
JSF Validator特點:







JSF標準Validator
validateDoubleRange
Validator標簽名:f:validateDoubleRange標簽。
屬性名:
maximum="最大值"
minimum="最小值"
Validator ID:javax.faces.DoubleRange
Validator 類:javax.faces.validator.DoubleRangeValidator
輸入值的范圍驗證。
輸入值必須為Number(數值)類型或者可以轉換為Double類型的值
validateLongRange
Validator標簽名:f:validateLongRange
屬性名:
maximum="最大值"
minimum="最小值"
Validator ID:javax.faces.LongRange
Validator 類:javax.faces.validator.LongRangeValidator
輸入值的范圍驗證。
輸入值必須為Number(數值)類型或者可以轉換為Long類型的值
validateLength
Validator標簽名:f:validateLength
屬性名:
maximum="最大值"
minimum="最小值"
Validator ID:javax.faces.Length
Validator 類:javax.faces.validator.LengthValidator
輸入值的長度驗證。
輸入值必須為String(字符串)或者可以轉換為String類型的值
JSF required(必須輸入) Validator
JSF的幾個輸入組件還可以使用required屬性簡單地驗證表單元素是否得到輸入。
<h:inputHidden required="true/false"></h:inputHidden>
<h:inputSecret required=“true/false”></h:inputSecret>
<h:inputText required=“true/false”></h:inputText>
<h:inputTextarea required=“true/false”></h:inputTextarea>
<h:selectBooleanCheckbox required=“true/false”></h:selectBooleanCheckbox>
<h:selectManyCheckbox required=“true/false”></h:selectManyCheckbox>
<h:selectManyListbox required=“true/false”></h:selectManyListbox>
<h:selectManyMenu required=“true/false”></h:selectManyMenu>
<h:selectOneListbox required=“true/false”></h:selectOneListbox>
<h:selectOneMenu required=“true/false”></h:selectOneMenu>
<h:selectOneRadio required=“true/false”></h:selectOneRadio>
JSF Validator的使用
各輸入組件使用required validator的方法上面已經作了介紹,這里不再重復。使用Method Validator
JSF支持Method級別的Validator,這種Validator實現起來比較簡單,可以在任何JSF的managed-bean里實現一個類似以下的方法:
- public void validateXxxx(FacesContext context,
- UIComponent component, Object value){
- String text = value.toString();
- if(!text.equals("xxxx")){
- throw new ValidatorException(new FacesMessage("some message"));
- }
- }
其中,context變量為JSF容器上下文環境,component為 綁定的組件,value為組件的輸入值。validateXxxx可以為任意你喜歡的方法名。與預期的輸入值不符合的話,可以通過throw一個 ValidatorException。"some message"便是想要顯示的錯誤消息。
然后在JSP中:
- <h:inputText value="#{mybean.someValue}" validator="#{mybean.validateXxxx}"/>
便可。
錯誤消息的顯示稍后再作介紹。
Validator標簽的使用
Validator標簽可以接收參數,所以功能上比較強大,也比較靈活。同時,除了使用JSF標準的Validator標簽之外,你還可以自定義Validator標簽。關于自定義Validator標簽我們將在另外的文章中加以介紹。
Validator標簽的使用例:
- <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">
- <f:validateDoubleRange maximum="5"></f:validateDoubleRange>
- </h:inputText>
- <h:message for="xxxxValue"></h:message>
上 例對id為xxxxValue的輸入框組件的輸入值做double范圍驗證,指定范圍最大值為5。超過5的情況則顯示錯誤消息,錯誤消息可以使 用<h:message />或者<h:messages />標簽顯示。有關消息處理的詳細介紹請參考:
JSF全面理解之消息處理
一文
f:validator標簽的使用與Validator ID
除了以上2種驗證方法之外,還可以使用f:validator標簽對輸入值加以驗證。f:validator標簽需要指定validatorId屬性,Validator Id需要在faces-config.xml配置文件中加以配置。
f:validator標簽的使用例:
- <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">
- <f:validator validatorId="Some Validator ID"></f:validator>
- </h:inputText>
"Some Validator ID"為具體的Validator ID,我們將在自定義Validator標簽一文中對Validator ID做詳細介紹。
JSF框架將調用指定Validator ID所對應的Validator的
public void validate(FacesContext context, UIComponent component, Object value)
方法。
跟Method Validator一樣,不能f:validator標簽傳入參數。
本文介紹了JSF Validator的機制,特點,種類,以及使用方法等。我們將在近期其它文章中介紹怎么自定義Validator。
JSF Validator進階篇 - 自定義JSF Validator
JSF框架提供Validator機制,對用戶輸入值的合法性進行驗證。若用戶輸入值無效,還提供了錯誤消息顯示功能,以幫助用戶能正確輸入。
在 JSF Validator入門基礎篇 - JSF Validator的介紹與使用 一文中我們介紹了JSF Validator的機制,特點,種類,以及使用方法等。
本文將介紹怎么自定義Validator和Validator標簽。
自定義Validator有2種方法:一種是Method Validator,我們在JSF Validator入門基礎篇 - JSF Validator的介紹與使用 一文中已作了介紹,這里不再詳述;另一種是通過實現Validator接口,也就是使用自定義的Validator類。
自定義Validator類與Validator標簽有以下幾個步驟:




自定義Validator類的實現
定義一個類,該類實現javax.faces.validator.Validaotr接口:
- package com.mypackages;
- import javax.faces.validator.Validaotr;
- public class MyValidator implements Validator {
- public void validate(FacesContext context, UIComponent component, Object value)
- throws ValidatorException {
- String text = value.toString();
- if(!text.equals("xxxx")){
- throw new ValidatorException(new FacesMessage("some message"));
- }
- }
- ... //其它參數設置,方法等(略)
- }
faces-config.xml登錄
自定義Validator類之后,還得向faces-config.xml登錄之后才能使用。
- <?xml version="1.0"?>
- <!DOCTYPE faces-config PUBLIC
- "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
- "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
- <faces-config xmlns="http://java.sun.com/JSF/Configuration">
- <validator>
- <validator-id>MyValidator</validator-id>
- <validator-class>com.mypackages.MyValidator</validator-class>
- </validator>
- </faces-config>
經過上面2個步驟,就可以使用MyValidator了。
例:
<h:inputText id="xxxxValue" value="#{mybean.xxxxValue}">
<f:validator validatorId="MyValidator"></f:validator>
</h:inputText>
自定義Validator標簽類
上面的MyValidator雖然可以通過f:validator標簽加以利用, 但不能向其傳入參數,若要向其傳入參數,則需要定義自定義Validator標簽類。
- package com.mypackages;
- import javax.faces.webapp.ValidatorTag;
- public class MyValidatorTag extends ValidatorTag{
- private String xxxParam;
- public MyValidatorTag(){
- setValidatorId("MyValidator");
- }
- protected Validator createValidator() throws JspException {
- MyValidator validator = (MyValidator)super.createValidator();
- validator.setXxxParam(xxxParam);
- return validator;
- }
- public String getXxxParam() {
- return xxxParam;
- }
- public void setXxxParam(String xxxParam) {
- this.xxxParam = xxxParam;
- }
- }
另外,為MyValidator.java加入相應參數及方法實現。
TLD文件
定義好Validator標簽類之后,還需要在TLD文件設置,有關TLD這里就不介紹了。請大家參考相關資料。
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE taglib
- PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
- "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
- <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
- <tlib-version>1.0</tlib-version>
- <jsp-version>1.2</jsp-version>
- <short-name>myv</short-name>
- <uri>my validator tag</uri>
- <display-name>my validator tag</display-name>
- <tag>
- <name>validateMyData</name>
- <tag-class>com.mypackages.MyValidatorTag</tag-class>
- <attribute>
- <name>xxxParam</name>
- <required>false</required>
- </attribute>
- </tag>
- </taglib>
自定義Validator標簽的使用

- <taglib>
- <taglib-uri>/WEB-INF/MyValidator.tld</taglib-uri>
- <taglib-location>/WEB-INF/MyValidator.tld</taglib-location>
- </taglib>
JSP
- <%@ taglib uri="WEB-INF/MyValidator.tld" prefix="myv" %>
- ...
- <h:inputText value="#{mybean.xxxxValue}">
- <myv:validateMyData xxxParam="Some Parameter"/>
- </h:inputText>