<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 就可以運行了。

    具體程序參看示例程序。

     

    主站蜘蛛池模板: 13一14周岁毛片免费| 永久黄网站色视频免费直播| 亚洲娇小性xxxx色| 免费在线观看亚洲| 99国产精品视频免费观看| 国产AV旡码专区亚洲AV苍井空| 国产精一品亚洲二区在线播放| 免费国产黄网站在线观看可以下载 | 1000部拍拍拍18勿入免费视频软件| 中文字幕亚洲男人的天堂网络| 亚洲色偷偷综合亚洲AV伊人| 狼群影院在线观看免费观看直播 | 足恋玩丝袜脚视频免费网站| 国产精品亚洲专区无码唯爱网| 亚洲国产精品无码专区| 日韩精品视频免费观看| 无码一区二区三区免费| 亚洲GV天堂无码男同在线观看| 天天影视色香欲综合免费| 精品亚洲福利一区二区| 亚洲欧洲春色校园另类小说| 亚洲成人一区二区| 国产成人午夜精品免费视频| 拍拍拍无挡免费视频网站| 精品国产日韩亚洲一区91| 亚洲国产亚洲综合在线尤物| 国产亚洲欧洲Aⅴ综合一区| 一个人看的www在线观看免费| 国产又黄又爽胸又大免费视频| 亚洲精品少妇30p| 国产91久久久久久久免费| 丁香六月婷婷精品免费观看| 亚洲va中文字幕无码久久不卡| 国产精品无码素人福利免费 | 国产高清在线免费| 亚洲免费在线观看视频| 日本高清不卡aⅴ免费网站| 日本永久免费a∨在线视频| 在线观看日本亚洲一区| 亚洲国产成人爱av在线播放| 最近免费中文字幕视频高清在线看|