<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

    JSF Validator入門基礎篇 - JSF Validator的介紹與使用

    JSF框架提供Validator機制,對用戶輸入值的合法性進行驗證。若用戶輸入值無效,還提供了錯誤消息顯示功能,以幫助用戶能正確輸入。

    在開始本文之前,建議閱讀下面的文章:
    深入了解JSF
    深入了解JSF(二):從JSF的Lifecycle看JSF對頁面的處理機制和流程
    以了解JSF的概念等。

    JSF Validator圖:


    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接口。本文的后面將對其作詳細介紹。


    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里實現一個類似以下的方法:
    1. public void validateXxxx(FacesContext context,   
    2.         UIComponent component, Object value){  
    3.   
    4.     String text = value.toString();  
    5.     if(!text.equals("xxxx")){  
    6.         throw new ValidatorException(new FacesMessage("some message"));  
    7.     }  
    8. }  

    其中,context變量為JSF容器上下文環境,component為 綁定的組件,value為組件的輸入值。validateXxxx可以為任意你喜歡的方法名。與預期的輸入值不符合的話,可以通過throw一個 ValidatorException。"some message"便是想要顯示的錯誤消息。

    然后在JSP中:
    1. <h:inputText value="#{mybean.someValue}" validator="#{mybean.validateXxxx}"/>  

    便可。
    錯誤消息的顯示稍后再作介紹。


    Validator標簽的使用


    Validator標簽可以接收參數,所以功能上比較強大,也比較靈活。同時,除了使用JSF標準的Validator標簽之外,你還可以自定義Validator標簽。關于自定義Validator標簽我們將在另外的文章中加以介紹。
    Validator標簽的使用例:
    1. <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">  
    2.  <f:validateDoubleRange maximum="5"></f:validateDoubleRange>  
    3. </h:inputText>  
    4. <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標簽的使用例:
    1. <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">  
    2.   <f:validator validatorId="Some Validator ID"></f:validator>  
    3. </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類的實現
    faces-config.xml登錄
    自定義Validator標簽類
    設置TLD文件


    自定義Validator類的實現
    定義一個類,該類實現javax.faces.validator.Validaotr接口:

    MyValidator.java
    1. package com.mypackages;  
    2.   
    3. import javax.faces.validator.Validaotr;  
    4.   
    5. public class MyValidator implements Validator {  
    6.     public void validate(FacesContext context, UIComponent component, Object value)  
    7.             throws ValidatorException {  
    8.   
    9.         String text = value.toString();  
    10.         if(!text.equals("xxxx")){  
    11.             throw new ValidatorException(new FacesMessage("some message"));  
    12.         }  
    13.     }  
    14.   
    15.     ... //其它參數設置,方法等(略)  
    16. }  


    faces-config.xml登錄
    自定義Validator類之后,還得向faces-config.xml登錄之后才能使用。
    faces-config.xml
    1. <?xml version="1.0"?>  
    2. <!DOCTYPE faces-config PUBLIC  
    3.   "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  
    4.   "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  
    5.   
    6.   
    7. <faces-config xmlns="http://java.sun.com/JSF/Configuration">  
    8.     <validator>  
    9.         <validator-id>MyValidator</validator-id>  
    10.         <validator-class>com.mypackages.MyValidator</validator-class>  
    11.     </validator>  
    12. </faces-config>  


    經過上面2個步驟,就可以使用MyValidator了。
    例:
    <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}">
      <f:validator validatorId="MyValidator"></f:validator>
    </h:inputText>

    自定義Validator標簽類
    上面的MyValidator雖然可以通過f:validator標簽加以利用, 但不能向其傳入參數,若要向其傳入參數,則需要定義自定義Validator標簽類。
    MyValidatorTag.java
    1. package com.mypackages;  
    2.   
    3. import javax.faces.webapp.ValidatorTag;  
    4.   
    5. public class MyValidatorTag extends ValidatorTag{  
    6.   
    7.     private String xxxParam;  
    8.       
    9.     public MyValidatorTag(){  
    10.         setValidatorId("MyValidator");  
    11.     }  
    12.       
    13.     protected Validator createValidator() throws JspException {  
    14.         MyValidator validator =  (MyValidator)super.createValidator();  
    15.         validator.setXxxParam(xxxParam);  
    16.         return validator;  
    17.     }  
    18.   
    19.     public String getXxxParam() {  
    20.         return xxxParam;  
    21.     }  
    22.   
    23.     public void setXxxParam(String xxxParam) {  
    24.         this.xxxParam = xxxParam;  
    25.     }  
    26. }  

    另外,為MyValidator.java加入相應參數及方法實現。

    TLD文件
    定義好Validator標簽類之后,還需要在TLD文件設置,有關TLD這里就不介紹了。請大家參考相關資料。

    MyValidator.tld
    1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
    2. <!DOCTYPE taglib  
    3.   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
    4.   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
    5. <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">  
    6.     <tlib-version>1.0</tlib-version>  
    7.     <jsp-version>1.2</jsp-version>  
    8.     <short-name>myv</short-name>  
    9.     <uri>my validator tag</uri>  
    10.     <display-name>my validator tag</display-name>  
    11.   
    12.     <tag>  
    13.         <name>validateMyData</name>  
    14.         <tag-class>com.mypackages.MyValidatorTag</tag-class>  
    15.         <attribute>  
    16.             <name>xxxParam</name>  
    17.             <required>false</required>  
    18.         </attribute>  
    19.     </tag>  
    20. </taglib>  


    自定義Validator標簽的使用
    web.xml
    1.  <taglib>  
    2.   <taglib-uri>/WEB-INF/MyValidator.tld</taglib-uri>  
    3.   <taglib-location>/WEB-INF/MyValidator.tld</taglib-location>  
    4.  </taglib>  



    JSP
    1. <%@ taglib uri="WEB-INF/MyValidator.tld" prefix="myv" %>  
    2.   
    3. ...  
    4.   
    5. <h:inputText value="#{mybean.xxxxValue}">  
    6.     <myv:validateMyData xxxParam="Some Parameter"/>  
    7. </h:inputText>  

    posted on 2009-04-14 10:58 seal 閱讀(3821) 評論(1)  編輯  收藏 所屬分類: Seam

    評論

    # re: JSF Validator(轉) 2015-10-15 14:40 asdfdsdfsadfasdfasdfsdf
    adsfasdfasdfadsfsdfadsf  回復  更多評論
      

    主站蜘蛛池模板: 中文字幕亚洲不卡在线亚瑟| 亚洲色偷偷综合亚洲AV伊人| 亚洲精品色在线网站| 国产亚洲精aa成人网站| 67pao强力打造国产免费| 亚洲另类无码专区丝袜| 久久久久亚洲精品天堂久久久久久| 三年片在线观看免费观看大全一 | 亚洲自偷自偷在线成人网站传媒 | 免费播放在线日本感人片| 亚洲人成网站在线观看播放动漫| 四虎影在线永久免费四虎地址8848aa| 91视频精品全国免费观看| 四虎必出精品亚洲高清| 亚洲精品国产品国语在线| 成人性生活免费视频| 久久久久久免费一区二区三区| 亚洲无人区码一二三码区别图片| 亚洲va久久久噜噜噜久久天堂| 麻豆国产VA免费精品高清在线| 久久精品国产大片免费观看| 在线精品自拍亚洲第一区| 亚洲日韩乱码中文无码蜜桃臀| 中文字幕亚洲日韩无线码| 在线a毛片免费视频观看| 无码专区AAAAAA免费视频| ssswww日本免费网站片| 亚洲欧美日韩综合久久久| 91亚洲国产成人精品下载| 国产亚洲精品自在线观看| 国产高清免费的视频| 久久精品a一国产成人免费网站| 中文字幕乱码一区二区免费| 看亚洲a级一级毛片| 亚洲香蕉在线观看| 久久精品国产亚洲av麻豆色欲| 久久久久久亚洲精品不卡| 免费永久在线观看黄网站| 国内大片在线免费看| 免费大片黄在线观看yw| 2022久久国产精品免费热麻豆|