爪哇一角

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

          五 JSF驗證器

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

          前面我們舉的例子,用戶需要輸入用戶名和密碼提交驗證。那么你輸入的密碼如果有長度限制,或者只能輸入數(shù)字的話,

          你可能會在用戶驗證之前進行檢查,這樣做也可以。

          但是我個人的理解,喚起應(yīng)用程序和執(zhí)行驗證相比,更靠后,程序效率會變低。而且程序的層次不清楚,驗證和邏輯混合,不易維護。

          所以我們可以自定義驗證器來解決。

           

          自定義驗證器要實現(xiàn)javax.faces.validator.Validator的validate()方法

          驗證出錯時ValidatorException,接受參數(shù)FacesMessage,可以在前臺用標(biāo)簽<h:messages>顯示。

          我們先寫個驗證器:

          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 {

                 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(!password.matches(".+[0-9]+")) {

                               FacesMessage message = new FacesMessage(

                                     FacesMessage.SEVERITY_ERROR,

                                     "密碼必須包括字元與數(shù)字",

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

                               throw new ValidatorException(message);

                        }

                 }

          }

          新建一個jsp文件,其實和上面例子用的jsp差不多,只是加入了密碼驗證。

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

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

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

          <html>

          <head>

          <title>JSF 自定義驗證器</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}">

          加入了密碼的驗證器。

           
                                      <f:validator validatorId="test.Password"/>

                               </h:inputSecret><p>

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

                 </h:form>

          </f:view>

          </body>

          </html>

          上面紅色部分就是加入的密碼驗證器,按照jsf的生命周期,它是在喚起應(yīng)用程序之前執(zhí)行的。

           

          faces-config.xmle中配置驗證器

          <!-- 驗證器 -->

              <validator>

                  <validator-id>test.Password</validator-id>

                  <validator-class>test.PasswordValidator</validator-class>

              </validator>

          Tomcat啟動后,http://localhost:8080/jsfTest/pages/jsfMyValidator.faces 就可以運行了。當(dāng)密碼輸入小于6或者有字母的時候,就會出錯。

          具體程序參看示例程序。
          主站蜘蛛池模板: 兰坪| 灌南县| 广水市| 泸州市| 商丘市| 阳曲县| 阳山县| 武山县| 临海市| 陆丰市| 通化县| 淮滨县| 南靖县| 绩溪县| 肇源县| 柳河县| 二手房| 华亭县| 大埔区| 美姑县| 郑州市| 修水县| 刚察县| 东源县| 鸡泽县| 神农架林区| 普兰县| 武陟县| 鄂托克旗| 简阳市| 尚义县| 炎陵县| 彭阳县| 南平市| 汕尾市| 定陶县| 赤壁市| 永福县| 灵武市| 南投市| 衡水市|