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

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

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

    lbom

    小江西

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      18 隨筆 :: 21 文章 :: 69 評論 :: 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
     
    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 {
    private String 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");
    throw new ValidatorException(message);
    }

    if(pattern != null && !password.matches(pattern)) {
    FacesMessage message = new FacesMessage(
    FacesMessage.SEVERITY_ERROR,
    "密碼必須包括字元與數(shù)字",
    "密碼必須是字元加數(shù)字所組成");
    throw new ValidatorException(message);
    }
    }
    }

    主要的差別是我們提供了pattern屬性,在validate()方法中進行驗證時,是根據(jù)我們所設(shè)定的pattern屬性,接著我們繼承 javax.faces.webapp.ValidatorTag來撰寫自己的驗證標籤:
     
    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 {
    private String 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
     
    <?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
     
    <?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
     
    <%@ 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()方法。

    Retrieved from http://caterpillar.onlyfun.net/PmWiki/pmwiki.php/JavaServerFaces/CustomConverterValidatorTag
    頁面最後更新於 2005 年 03 月 09 日,12:28 上午
    posted on 2006-03-06 17:21 lbom 閱讀(783) 評論(0)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)資料
    主站蜘蛛池模板: 国产精品久免费的黄网站| 99在线观看精品免费99| 国产极品粉嫩泬免费观看| 久久亚洲国产最新网站| 人成午夜免费视频在线观看| 7777久久亚洲中文字幕蜜桃| 日本xxxx色视频在线观看免费| 亚洲AV日韩AV永久无码免下载| a毛片免费在线观看| 久久精品国产96精品亚洲| 久久久久久成人毛片免费看| 一区二区三区亚洲| 国产成人福利免费视频| 亚洲乱码中文字幕小综合| 成年网站免费视频A在线双飞| 国产精品亚洲精品青青青| 成人一a毛片免费视频| 精品在线视频免费| 久久精品国产亚洲Aⅴ香蕉 | 在线观看成人免费视频| 亚洲国产精品成人AV在线| 亚洲 自拍 另类小说综合图区| 日韩在线一区二区三区免费视频 | 亚洲国产精品国自产拍电影| 五月婷婷在线免费观看| 亚洲影院天堂中文av色| 亚洲XX00视频| 精品免费视在线观看| 亚洲一区二区三区在线观看蜜桃| 日韩精品视频免费观看| 中文字幕免费在线看线人动作大片 | 日韩视频在线免费观看| 一区二区三区免费视频播放器| 亚洲精品成人片在线观看精品字幕 | 精品在线免费视频| 亚洲精品~无码抽插| 国产h视频在线观看免费| 免费国产黄网站在线看| 亚洲国产一区二区a毛片| 国产成人一区二区三区免费视频 | 亚洲免费在线观看|