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

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

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

    Kimi's NutShell

    我荒廢的今日,正是昨日殞身之人祈求的明日

    BlogJava 新隨筆 管理
      141 Posts :: 0 Stories :: 75 Comments :: 0 Trackbacks
    自訂驗證器 中,我們的驗證器只能驗證一種pattern(.+[0-9]+),我們希望可以在JSF頁面上自訂匹配的pattern,然而由於我們使用<f: validator>這個通用的驗證器標籤,為了要能提供pattern屬性,我們可以使用<f:attribute>標籤來設(shè)置,例如:
    								....
      <h:inputSecret value="#{user.password}" required="true"> 
        <f:validator validatorId="onlyfun.caterpillar.Password"/>
        <f:attribute name="pattern" value=".+[0-9]+"/>
     </h:inputSecret><p>
     ....
    						

      使用<f:attribute>標籤來設(shè)定屬性,接著我們可以如下取得所設(shè)定的屬性:

    								....
     public void validate(FacesContext context, 
                             UIComponent component, 
                             Object obj)
                throws ValidatorException {
         ....
         String pattern = (String)
                      component.getAttributes().get("pattern");
         ....
     }
     ....
    						

      您也可以開發(fā)自己的一組驗證標籤,並提供相關(guān)屬性設(shè)定,這需要瞭解JSP Tag Library的撰寫,所以請您先參考 JSP/Servlet 中有關(guān)於JSP Tag Library的介紹。

      要開發(fā)驗證器轉(zhuǎn)用標籤,您可以直接繼承javax.faces.webapp.ValidatorTag,這個類別可以幫您處理大部份的細節(jié),您所需要的,就是重新定義它的createValidator()方法,我們以改寫 自訂驗證器 中的PasswordValidator為例:

    • PasswordValidator.java
    PasswordValidator.java
    								
    										
    												package onlyfun.caterpillar;
    
     import javax.faces.application.FacesMessage;
     import javax.faces.component.UIComponent;
     import javax.faces.context.FacesContext;
     import javax.faces.validator.Validator;
     import javax.faces.validator.ValidatorException;
    
     public class PasswordValidator implements Validator {
        privateString pattern;
    
        public void setPattern(String pattern) {
            this.pattern = pattern;
        }
        
        public void validate(FacesContext context, 
                             UIComponent component, 
                             Object obj)
                throws ValidatorException {
            String password = (String) obj;
            
            if(password.length() < 6) {
                FacesMessage message = new FacesMessage(
                  FacesMessage.SEVERITY_ERROR, 
                  "字元長度小於6", "字元長度不得小於6");
                thrownew ValidatorException(message);
            }
            
            if(pattern != null && !password.matches(pattern)) {
                FacesMessage message = new FacesMessage(
                      FacesMessage.SEVERITY_ERROR, 
                      "密碼必須包括字元與數(shù)字", 
                      "密碼必須是字元加數(shù)字所組成");
                thrownew ValidatorException(message);
            }
        }
     }
    								
    						

      主要的差別是我們提供了pattern屬性,在validate()方法中進行驗證時,是根據(jù)我們所設(shè)定的pattern屬性,接著我們繼承javax.faces.webapp.ValidatorTag來撰寫自己的驗證標籤:

    PasswordValidatorTag.java
    								
    										
    												package onlyfun.caterpillar;
    
     import javax.faces.application.Application;
     import javax.faces.context.FacesContext;
     import javax.faces.validator.Validator;
     import javax.faces.webapp.ValidatorTag;
    
     public class PasswordValidatorTag extends ValidatorTag {
        privateString pattern;
        
        public void setPattern(String pattern) {
            this.pattern = pattern;
        }
        
        protected Validator createValidator() {
            Application application = 
                FacesContext.getCurrentInstance().
                             getApplication();
            PasswordValidator validator = 
                (PasswordValidator) application.createValidator(
                        "onlyfun.caterpillar.Password");
            validator.setPattern(pattern);
            return validator;
        }
     }
    								
    						

      application.createValidator()方法建立驗證器物件時,是根據(jù)在faces-config.xml中註冊驗證器的識別(Validater ID):

    • faces-config.xml
    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>
     ....
        <validator>
            <validator-id>
                onlyfun.caterpillar.Password
            </validator-id>
            <validator-class>
                onlyfun.caterpillar.PasswordValidator
            </validator-class>
        </validator>
     ....
     </faces-config>
    								
    						

      剩下來的工作,就是佈署tld描述檔了,我們簡單的定義一下:

    • taglib.tld
    taglib.tld
    								<?xml version="1.0" encoding="UTF-8" ?> 
     
     <taglib xmlns=
    								
    										
    												"http://java.sun.com/xml/ns/j2ee"    xmlns:xsi=
    								
    								
    										
    												"http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http:
    								
    								
    										
    												//java.sun.com/xml/ns/j2ee 
                            web-jsptaglibrary_2_0.xsd" 
        version="2.0"> 
        
        <description>PasswordValidator Tag</description> 
        <tlib-version>1.0</tlib-version> 
        <jsp-version>2.0</jsp-version> 
        <short-name>co</short-name> 
        <uri>http:
    								
    								
    										
    												//caterpillar.onlyfun.net</uri> 
    
        <tag> 
            <description>PasswordValidator</description> 
            <name>passwordValidator</name> 
            <tag-class>
                onlyfun.caterpillar.PasswordValidatorTag
            </tag-class> 
            <body-content>empty</body-content> 
            <attribute> 
                <name>pattern</name> 
                <required>true</required> 
                <rtexprvalue>false</rtexprvalue> 
            </attribute> 
        </tag> 
    
     </taglib>
    								
    						

      而我們的index.jsp改寫如下:

    • index.jsp
    index.jsp
    								<%@ taglib uri=
    								
    										
    												"http://java.sun.com/jsf/core" prefix="f" %>
     <%@ taglib uri=
    								
    								
    										
    												"http://java.sun.com/jsf/html" prefix="h" %>
     <%@ taglib uri="/WEB-INF/taglib.tld" prefix="co" %>
     <%@page contentType="text/html;charset=Big5"%> 
     <html>
     <head>
     <title>驗證器示範</title>
     </head>
     <body>
        <f:view>
            <h:messages layout="table" style="color:red"/>
            <h:form>
                <h3>請輸入您的名稱</h3>
                <h:outputText value="#{user.errMessage}"/><p>
               名稱: <h:inputText value="#{user.name}" 
                                  required="true"/><p>
               密碼: <h:inputSecret value="#{user.password}" 
                                    required="true">
                         <co:passwordValidator pattern=".+[0-9]+"/>
                     </h:inputSecret> <p>
                <h:commandButton value="送出" 
                                 action="#{user.verify}"/>
            </h:form>
        </f:view>
     </body>
     </html>
    								
    						

      主要的差別是,我們使用了自己的驗證器標籤:

    								<co:passwordValidator pattern=".+[0-9]+"/>
    						

      如果要自訂轉(zhuǎn)換器標籤,方法也是類似,您要作的是繼承javax.faces.webapp.ConverterTag,並重新定義其createConverter()方法。

    posted on 2006-05-19 11:02 Kimi 閱讀(403) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲天堂福利视频| 日韩电影免费在线观看视频| 99在线热视频只有精品免费| 一本岛高清v不卡免费一三区| 成人免费视频网站www| 免费在线观看中文字幕| 精品久久香蕉国产线看观看亚洲| 亚洲天堂中文资源| 亚洲欧美成人综合久久久| a级毛片免费观看网站| 四虎在线视频免费观看视频| 国产成人无码区免费A∨视频网站| 亚洲人成无码网站久久99热国产| 亚洲理论在线观看| eeuss免费影院| 国产免费人成视频在线观看| 无码欧精品亚洲日韩一区| 精品亚洲成a人在线观看| 免费视频成人片在线观看| 亚洲成年人啊啊aa在线观看| 亚洲av无码久久忘忧草| 中文在线观看国语高清免费| 精品剧情v国产在免费线观看| 中文字幕亚洲免费无线观看日本| j8又粗又长又硬又爽免费视频| 日韩欧美一区二区三区免费观看| 亚洲爆乳无码专区| 中文无码日韩欧免费视频| 亚洲国产成人久久一区WWW| 亚洲另类春色校园小说| 亚洲免费闲人蜜桃| 久久久亚洲欧洲日产国码二区| a级毛片无码免费真人久久| 亚洲日本一区二区三区在线不卡| 亚洲成a人片在线不卡一二三区| 91频在线观看免费大全| 亚洲高清资源在线观看| 98精品全国免费观看视频| 久久久久亚洲Av无码专| 午夜福利不卡片在线播放免费| 久久久亚洲裙底偷窥综合|