<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks

    JSF Validator入門基礎(chǔ)篇 - JSF Validator的介紹與使用

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

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

    JSF Validator圖:


    JSF Validator特點(diǎn):
    輸入數(shù)據(jù)的驗(yàn)證放在服務(wù)器端進(jìn)行。
    需要驗(yàn)證輸入值的組件(輸入組件)在JSP里通過JSF標(biāo)簽加以設(shè)置,方法簡單直觀。
    每個(gè)輸入組件可以同時(shí)綁定多個(gè)Validator。
    驗(yàn)證發(fā)生錯(cuò)誤時(shí),可以向FacesContext登錄錯(cuò)誤信息,并且可以通過JSP直接顯示。顯示風(fēng)格與位置可以自由設(shè)定。
    驗(yàn)證錯(cuò)誤時(shí),JSF的生命周期控制機(jī)制自動(dòng)中止處理流程,跳轉(zhuǎn)到畫面描畫階段(Render Response Phase)。
    JSF標(biāo)準(zhǔn)提供對數(shù)值(long, double)的最大最小值驗(yàn)證,文字列的最大最小長度驗(yàn)證,以及必須(required)驗(yàn)證等Validator。
    支持用戶自定義Validator。用戶自定義Validator的方法有2種,一種是Method Validator,一種是實(shí)現(xiàn)javax.faces.validator.Validator接口。本文的后面將對其作詳細(xì)介紹。


    JSF標(biāo)準(zhǔn)Validator

    validateDoubleRange


    Validator標(biāo)簽名:f:validateDoubleRange標(biāo)簽。
      屬性名:
          maximum="最大值"
          minimum="最小值"
    Validator ID:javax.faces.DoubleRange
    Validator 類:javax.faces.validator.DoubleRangeValidator
    輸入值的范圍驗(yàn)證。
    輸入值必須為Number(數(shù)值)類型或者可以轉(zhuǎn)換為Double類型的值

    validateLongRange


    Validator標(biāo)簽名:f:validateLongRange
      屬性名:
          maximum="最大值"
          minimum="最小值"
    Validator ID:javax.faces.LongRange
    Validator 類:javax.faces.validator.LongRangeValidator
    輸入值的范圍驗(yàn)證。
    輸入值必須為Number(數(shù)值)類型或者可以轉(zhuǎn)換為Long類型的值

    validateLength


    Validator標(biāo)簽名:f:validateLength
      屬性名:
          maximum="最大值"
          minimum="最小值"
    Validator ID:javax.faces.Length
    Validator 類:javax.faces.validator.LengthValidator
    輸入值的長度驗(yàn)證。
    輸入值必須為String(字符串)或者可以轉(zhuǎn)換為String類型的值


    JSF required(必須輸入) Validator
    JSF的幾個(gè)輸入組件還可以使用required屬性簡單地驗(yàn)證表單元素是否得到輸入。
    <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的方法上面已經(jīng)作了介紹,這里不再重復(fù)。

    使用Method Validator


    JSF支持Method級(jí)別的Validator,這種Validator實(shí)現(xiàn)起來比較簡單,可以在任何JSF的managed-bean里實(shí)現(xiàn)一個(gè)類似以下的方法:
    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容器上下文環(huán)境,component為 綁定的組件,value為組件的輸入值。validateXxxx可以為任意你喜歡的方法名。與預(yù)期的輸入值不符合的話,可以通過throw一個(gè) ValidatorException。"some message"便是想要顯示的錯(cuò)誤消息。

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

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


    Validator標(biāo)簽的使用


    Validator標(biāo)簽可以接收參數(shù),所以功能上比較強(qiáng)大,也比較靈活。同時(shí),除了使用JSF標(biāo)準(zhǔn)的Validator標(biāo)簽之外,你還可以自定義Validator標(biāo)簽。關(guān)于自定義Validator標(biāo)簽我們將在另外的文章中加以介紹。
    Validator標(biāo)簽的使用例:
    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范圍驗(yàn)證,指定范圍最大值為5。超過5的情況則顯示錯(cuò)誤消息,錯(cuò)誤消息可以使 用<h:message />或者<h:messages />標(biāo)簽顯示。有關(guān)消息處理的詳細(xì)介紹請參考:
    JSF全面理解之消息處理
    一文

    f:validator標(biāo)簽的使用與Validator ID


    除了以上2種驗(yàn)證方法之外,還可以使用f:validator標(biāo)簽對輸入值加以驗(yàn)證。f:validator標(biāo)簽需要指定validatorId屬性,Validator Id需要在faces-config.xml配置文件中加以配置。


    f:validator標(biāo)簽的使用例:
    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標(biāo)簽一文中對Validator ID做詳細(xì)介紹。

    JSF框架將調(diào)用指定Validator ID所對應(yīng)的Validator的
    public void validate(FacesContext context, UIComponent component, Object value)
    方法。

    跟Method Validator一樣,不能f:validator標(biāo)簽傳入?yún)?shù)。

    本文介紹了JSF Validator的機(jī)制,特點(diǎn),種類,以及使用方法等。我們將在近期其它文章中介紹怎么自定義Validator。

    JSF Validator進(jìn)階篇 - 自定義JSF Validator


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


    JSF Validator入門基礎(chǔ)篇 - JSF Validator的介紹與使用  一文中我們介紹了JSF Validator的機(jī)制,特點(diǎn),種類,以及使用方法等。

    本文將介紹怎么自定義Validator和Validator標(biāo)簽。

    自定義Validator有2種方法:一種是Method Validator,我們在JSF Validator入門基礎(chǔ)篇 - JSF Validator的介紹與使用  一文中已作了介紹,這里不再詳述;另一種是通過實(shí)現(xiàn)Validator接口,也就是使用自定義的Validator類。

    自定義Validator類與Validator標(biāo)簽有以下幾個(gè)步驟:
    自定義Validator類的實(shí)現(xiàn)
    faces-config.xml登錄
    自定義Validator標(biāo)簽類
    設(shè)置TLD文件


    自定義Validator類的實(shí)現(xiàn)
    定義一個(gè)類,該類實(shí)現(xiàn)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.     ... //其它參數(shù)設(shè)置,方法等(略)  
    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>  


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

    自定義Validator標(biāo)簽類
    上面的MyValidator雖然可以通過f:validator標(biāo)簽加以利用, 但不能向其傳入?yún)?shù),若要向其傳入?yún)?shù),則需要定義自定義Validator標(biāo)簽類。
    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加入相應(yīng)參數(shù)及方法實(shí)現(xiàn)。

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

    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標(biāo)簽的使用
    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 閱讀(3822) 評(píng)論(1)  編輯  收藏 所屬分類: Seam

    評(píng)論

    # re: JSF Validator(轉(zhuǎn)) 2015-10-15 14:40 asdfdsdfsadfasdfasdfsdf
    adsfasdfasdfadsfsdfadsf  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 2019中文字幕免费电影在线播放| 亚洲熟女一区二区三区| 国产午夜无码精品免费看| 亚洲精品无码一区二区| 久久精品夜色国产亚洲av| 国产免费观看视频| 久久精品无码一区二区三区免费| 成全高清在线观看免费| 午夜在线免费视频 | 中文日韩亚洲欧美制服| 久久久亚洲欧洲日产国码农村| 免费a在线观看播放| 日本亚洲精品色婷婷在线影院| 久久精品亚洲综合专区| 国产亚洲精品a在线观看| 免费又黄又爽的视频| 日本最新免费不卡二区在线| 2020久久精品国产免费| 亚欧色视频在线观看免费| 久久免费视频精品| 久久一区二区三区免费播放| 成全视频免费观看在线看| 国产精品综合专区中文字幕免费播放| 日本亚洲欧美色视频在线播放 | 亚洲国产精品久久网午夜| 亚洲香蕉网久久综合影视| 国产小视频在线免费| 无码国产精品一区二区免费I6| 日本永久免费a∨在线视频 | 亚洲精品天天影视综合网| 中文字幕亚洲一区二区va在线| 日本二区免费一片黄2019| 一个人免费观看www视频在线| 免费无码成人AV在线播放不卡 | 免费高清国产视频| 亚洲阿v天堂在线2017免费| 亚洲成av人片在线天堂无| 亚洲砖码砖专无区2023| 亚洲va在线va天堂va手机| 亚洲精品视频在线播放| 国产精品亚洲аv无码播放|