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

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

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

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    六 JSF自定義轉換驗證標簽

    Posted on 2009-01-20 14:48 非洲小白臉 閱讀(364) 評論(0)  編輯  收藏 所屬分類: JSF

    我們的驗證器只能驗證一種pattern,上例的密碼驗證,只能在程序中指定匹配一種正則表達式“.+[0-9]+“,這對于程序的重復利用和維護都十分不利。

    這里我們可以自定義一個JSF標簽,將pattern作為一個屬性,就可以達到重復利用和易于維護的目的了。

    轉換器也是同樣的道理。

     

    自定義標簽可以直接繼承javax.faces.webapp.ValidatorTag,重新定義它的createValidator()方法。

    我們改造一下上例JSF的密碼驗證器的例子。

    PasswordValidator中增加一個變量pattern,用來存儲密碼驗證的匹配表達式。

    package test;

    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 {

    用來存儲密碼驗證的匹配表達式。

     
           private String pattern;

     

        public void setPattern(String pattern) {

            this.pattern = pattern;

        }

           public void validate(FacesContext context,

                UIComponent component,

                Object obj)

           throws ValidatorException {

    設置默認值。

     
                  if(pattern == null || pattern.equals("")){

                         pattern = ".+[0-9]+";

                  }

                  String password = (String) obj;

                 

                  if(password.length() < 6) {

                         FacesMessage message = new FacesMessage(

                             FacesMessage.SEVERITY_ERROR,

                             "字元長度小于6",

                             "字元長度不得小于6");

                         throw new ValidatorException(message);

                  }

                  if(!password.matches(pattern)) {

                         FacesMessage message = new FacesMessage(

                               FacesMessage.SEVERITY_ERROR,

                               "密碼必須包括字元與數字",

                               "密碼必須是字元加數字所組成");

                         throw new ValidatorException(message);

                  }

           }

    }

    我們在用上面的驗證器進行驗證的時候,就可以設定pattern的屬性了。

    這樣我們就必須制作自己的驗證標簽,自定義標簽需要繼承javax.faces.webapp.ValidatorTag來實現。

    package test;

    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 {

           private String pattern;

        public void setPattern(String pattern) {

            this.pattern = pattern;

        }

        protected Validator createValidator() {

            Application application =

                FacesContext.getCurrentInstance().

                             getApplication();

            PasswordValidator validator =

                (PasswordValidator) application.createValidator(

    face-config.xml中定義的驗證器的別名一致。

     
                        "test.Password");

            validator.setPattern(pattern);

    設置pattern的屬性。

     
            return validator;

        }

     }

    制作完自定義標簽后,還需要部署在TLD文件中。下面簡單定義一下:

    <tag>

           <description>PasswordValidator</description>

           <name>passwordValidator</name>

           <tag-class>

               test.PasswordValidatorTag

           </tag-class>

           <body-content>empty</body-content>

           <attribute>

               <name>pattern</name>

               <required>true</required>

               <rtexprvalue>false</rtexprvalue>

           </attribute>

       </tag>

    具體參看textcmd.tld

    <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

    追加新加入的tld文件。

     
    <%@ taglib uri="/WEB-INF/textcmd.tld" prefix="co" %>

    <%@page contentType="text/html;charset=utf-8"%>

    <html>

    <head>

    <title>JSF 自定義驗證器Tag</title>

    </head>

    <body>

    <f:view>

           <h:form>

                  <h3>請輸入您的名稱</h3>

                  <h:message for="dateField" style="color:red" /><p>

                  <h:outputText value="#{user.errMessage}" style="color:red"/><p>

                  <!-- 姓名 -->

                  名稱:<h:inputText value="#{user.name}" />

                  <p>密碼:<h:inputSecret id="dateField" value="#{user.password}">

    自定義pattern屬性。

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

                         </h:inputSecret><p>

                  <p><h:commandButton value="送出" action="#{user.verify}" />

           </h:form>

    </f:view>

    </body>

    </html>

     

    Tomcat啟動后,http://localhost:8080/jsfTest/pages/jsfMyTagValidator.faces 就可以運行了。

    具體程序參看示例程序。

     

    主站蜘蛛池模板: 亚洲精品高清国产麻豆专区| 日韩午夜理论免费TV影院| 亚洲精品美女久久久久| 免费少妇a级毛片| 91精品国产免费久久久久久青草 | 99久久免费精品高清特色大片| 国产精品亚洲va在线观看| 亚洲乱码在线观看| 亚洲国产精品热久久| 亚洲中文字幕无码专区| 国产成人无码免费视频97| 国产福利在线免费| **实干一级毛片aa免费| 久久国产精品成人免费| 国产无遮挡色视频免费观看性色| 亚洲AV无码XXX麻豆艾秋| 亚洲毛片基地4455ww| 亚洲色图校园春色| 亚洲av中文无码乱人伦在线咪咕| 国产精品亚洲w码日韩中文| 国产成人免费一区二区三区| 大香人蕉免费视频75| 国产1024精品视频专区免费 | 亚洲国产美女福利直播秀一区二区| 久久久青草青青亚洲国产免观| 亚洲午夜成人精品电影在线观看| 又黄又爽无遮挡免费视频| 成人免费视频国产| 免费看美女被靠到爽的视频| 成年人免费观看视频网站| 午夜视频免费成人| 日韩精品免费一区二区三区| 日本特黄特色aa大片免费| 暖暖免费高清日本一区二区三区 | 久久亚洲欧美国产精品| 色九月亚洲综合网| 美女裸免费观看网站| 精品熟女少妇aⅴ免费久久 | 亚洲免费人成在线视频观看| 自拍偷自拍亚洲精品情侣| 亚洲国产无套无码av电影|