爪哇一角

共同探讨STRUTS#HIBERNATE#SPRING#EJB等技术
posts - 3, comments - 6, trackbacks - 0, articles - 99
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

五 JSF验证器

Posted on 2009-01-20 14:48 非洲小白脸 阅读(479) 评论(0)  编辑  收藏 所属分类: JSF

前面我们举的例子,用户需要输入用户名和密码提交验证。那么你输入的密码如果有长度限制,或者只能输入数字的话,

你可能会在用户验证之前进行检查,这样做也可以。

但是我个人的理解,唤起应用程序和执行验证相比,更靠后,程序效率会变低。而且程序的层次不清楚,验证和逻辑混合,不易维护。

所以我们可以自定义验证器来解决。

 

自定义验证器要实现javax.faces.validator.Validator的validate()方法

验证出错时ValidatorException,接受参数FacesMessage,可以在前台用标签<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,

                           "密码必须包括字元与数字",

                           "密码必须是字元加数字所组成");

                     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的生命周期,它是在唤起应用程序之前执行的。

 

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 就可以运行了。当密码输入小于6或者有字母的时候,就会出错。

具体程序参看示例程序。

只有注册用户登录后才能发表评论。


网站导航: