Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks

JSF Validator入门基础篇 - JSF Validator的介绍与使用

JSF框架提供Validator机制,对用户输入值的合法性进行验证。若用户输入值无效,还提供了错误消息显示功能,以帮助用户能正确输入。

在开始本文之前,建议阅读下面的文章:
深入了解JSF
深入了解JSF(二):从JSF的Lifecycle看JSF对页面的处理机制和流程
以了解JSF的概念等。

JSF Validator图:


JSF Validator特点:
输入数据的验证放在服务器端进行。
需要验证输入值的组件(输入组件)在JSP里通过JSF标签加以设置,方法简单直观。
每个输入组件可以同时绑定多个Validator。
验证发生错误时,可以向FacesContext登录错误信息,并且可以通过JSP直接显示。显示风格与位置可以自由设定。
验证错误时,JSF的生命周期控制机制自动中止处理流程,跳转到画面描画阶段(Render Response Phase)。
JSF标准提供对数值(long, double)的最大最小值验证,文字列的最大最小长度验证,以及必须(required)验证等Validator。
支持用户自定义Validator。用户自定义Validator的方法有2种,一种是Method Validator,一种是实现javax.faces.validator.Validator接口。本文的后面将对其作详细介绍。


JSF标准Validator

validateDoubleRange


Validator标签名:f:validateDoubleRange标签。
  属性名:
      maximum="最大值"
      minimum="最小值"
Validator ID:javax.faces.DoubleRange
Validator 类:javax.faces.validator.DoubleRangeValidator
输入值的范围验证。
输入值必须为Number(数值)类型或者可以转换为Double类型的值

validateLongRange


Validator标签名:f:validateLongRange
  属性名:
      maximum="最大值"
      minimum="最小值"
Validator ID:javax.faces.LongRange
Validator 类:javax.faces.validator.LongRangeValidator
输入值的范围验证。
输入值必须为Number(数值)类型或者可以转换为Long类型的值

validateLength


Validator标签名:f:validateLength
  属性名:
      maximum="最大值"
      minimum="最小值"
Validator ID:javax.faces.Length
Validator 类:javax.faces.validator.LengthValidator
输入值的长度验证。
输入值必须为String(字符串)或者可以转换为String类型的值


JSF required(必须输入) Validator
JSF的几个输入组件还可以使用required属性简单地验证表单元素是否得到输入。
<h:inputHidden required="true/false"></h:inputHidden>
<h:inputSecret required=“true/false”></h:inputSecret>
<h:inputText required=“true/false”></h:inputText>
<h:inputTextarea required=“true/false”></h:inputTextarea>

<h:selectBooleanCheckbox required=“true/false”></h:selectBooleanCheckbox>
<h:selectManyCheckbox required=“true/false”></h:selectManyCheckbox>
<h:selectManyListbox required=“true/false”></h:selectManyListbox>
<h:selectManyMenu required=“true/false”></h:selectManyMenu>
<h:selectOneListbox required=“true/false”></h:selectOneListbox>
<h:selectOneMenu required=“true/false”></h:selectOneMenu>
<h:selectOneRadio required=“true/false”></h:selectOneRadio>

JSF Validator的使用
各输入组件使用required validator的方法上面已经作了介绍,这里不再重复。

使用Method Validator


JSF支持Method级别的Validator,这种Validator实现起来比较简单,可以在任何JSF的managed-bean里实现一个类似以下的方法:
  1. public void validateXxxx(FacesContext context,   
  2.         UIComponent component, Object value){  
  3.   
  4.     String text = value.toString();  
  5.     if(!text.equals("xxxx")){  
  6.         throw new ValidatorException(new FacesMessage("some message"));  
  7.     }  
  8. }  

其中,context变量为JSF容器上下文环境,component为 绑定的组件,value为组件的输入值。validateXxxx可以为任意你喜欢的方法名。与预期的输入值不符合的话,可以通过throw一个 ValidatorException。"some message"便是想要显示的错误消息。

然后在JSP中:
  1. <h:inputText value="#{mybean.someValue}" validator="#{mybean.validateXxxx}"/>  

便可。
错误消息的显示稍后再作介绍。


Validator标签的使用


Validator标签可以接收参数,所以功能上比较强大,也比较灵活。同时,除了使用JSF标准的Validator标签之外,你还可以自定义Validator标签。关于自定义Validator标签我们将在另外的文章中加以介绍。
Validator标签的使用例:
  1. <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">  
  2.  <f:validateDoubleRange maximum="5"></f:validateDoubleRange>  
  3. </h:inputText>  
  4. <h:message for="xxxxValue"></h:message>  

上 例对id为xxxxValue的输入框组件的输入值做double范围验证,指定范围最大值为5。超过5的情况则显示错误消息,错误消息可以使 用<h:message />或者<h:messages />标签显示。有关消息处理的详细介绍请参考:
JSF全面理解之消息处理
一文

f:validator标签的使用与Validator ID


除了以上2种验证方法之外,还可以使用f:validator标签对输入值加以验证。f:validator标签需要指定validatorId属性,Validator Id需要在faces-config.xml配置文件中加以配置。


f:validator标签的使用例:
  1. <h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">  
  2.   <f:validator validatorId="Some Validator ID"></f:validator>  
  3. </h:inputText>  

"Some Validator ID"为具体的Validator ID,我们将在自定义Validator标签一文中对Validator ID做详细介绍。

JSF框架将调用指定Validator ID所对应的Validator的
public void validate(FacesContext context, UIComponent component, Object value)
方法。

跟Method Validator一样,不能f:validator标签传入参数。

本文介绍了JSF Validator的机制,特点,种类,以及使用方法等。我们将在近期其它文章中介绍怎么自定义Validator。

JSF Validator进阶篇 - 自定义JSF Validator


JSF框架提供Validator机制,对用户输入值的合法性进行验证。若用户输入值无效,还提供了错误消息显示功能,以帮助用户能正确输入。


JSF Validator入门基础篇 - JSF Validator的介绍与使用  一文中我们介绍了JSF Validator的机制,特点,种类,以及使用方法等。

本文将介绍怎么自定义Validator和Validator标签。

自定义Validator有2种方法:一种是Method Validator,我们在JSF Validator入门基础篇 - JSF Validator的介绍与使用  一文中已作了介绍,这里不再详述;另一种是通过实现Validator接口,也就是使用自定义的Validator类。

自定义Validator类与Validator标签有以下几个步骤:
自定义Validator类的实现
faces-config.xml登录
自定义Validator标签类
设置TLD文件


自定义Validator类的实现
定义一个类,该类实现javax.faces.validator.Validaotr接口:

MyValidator.java
  1. package com.mypackages;  
  2.   
  3. import javax.faces.validator.Validaotr;  
  4.   
  5. public class MyValidator implements Validator {  
  6.     public void validate(FacesContext context, UIComponent component, Object value)  
  7.             throws ValidatorException {  
  8.   
  9.         String text = value.toString();  
  10.         if(!text.equals("xxxx")){  
  11.             throw new ValidatorException(new FacesMessage("some message"));  
  12.         }  
  13.     }  
  14.   
  15.     ... //其它参数设置,方法等(略)  
  16. }  


faces-config.xml登录
自定义Validator类之后,还得向faces-config.xml登录之后才能使用。
faces-config.xml
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE faces-config PUBLIC  
  3.   "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"  
  4.   "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">  
  5.   
  6.   
  7. <faces-config xmlns="http://java.sun.com/JSF/Configuration">  
  8.     <validator>  
  9.         <validator-id>MyValidator</validator-id>  
  10.         <validator-class>com.mypackages.MyValidator</validator-class>  
  11.     </validator>  
  12. </faces-config>  


经过上面2个步骤,就可以使用MyValidator了。
例:
<h:inputText id="xxxxValue" value="#{mybean.xxxxValue}">
  <f:validator validatorId="MyValidator"></f:validator>
</h:inputText>

自定义Validator标签类
上面的MyValidator虽然可以通过f:validator标签加以利用, 但不能向其传入参数,若要向其传入参数,则需要定义自定义Validator标签类。
MyValidatorTag.java
  1. package com.mypackages;  
  2.   
  3. import javax.faces.webapp.ValidatorTag;  
  4.   
  5. public class MyValidatorTag extends ValidatorTag{  
  6.   
  7.     private String xxxParam;  
  8.       
  9.     public MyValidatorTag(){  
  10.         setValidatorId("MyValidator");  
  11.     }  
  12.       
  13.     protected Validator createValidator() throws JspException {  
  14.         MyValidator validator =  (MyValidator)super.createValidator();  
  15.         validator.setXxxParam(xxxParam);  
  16.         return validator;  
  17.     }  
  18.   
  19.     public String getXxxParam() {  
  20.         return xxxParam;  
  21.     }  
  22.   
  23.     public void setXxxParam(String xxxParam) {  
  24.         this.xxxParam = xxxParam;  
  25.     }  
  26. }  

另外,为MyValidator.java加入相应参数及方法实现。

TLD文件
定义好Validator标签类之后,还需要在TLD文件设置,有关TLD这里就不介绍了。请大家参考相关资料。

MyValidator.tld
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE taglib  
  3.   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
  4.   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  5. <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">  
  6.     <tlib-version>1.0</tlib-version>  
  7.     <jsp-version>1.2</jsp-version>  
  8.     <short-name>myv</short-name>  
  9.     <uri>my validator tag</uri>  
  10.     <display-name>my validator tag</display-name>  
  11.   
  12.     <tag>  
  13.         <name>validateMyData</name>  
  14.         <tag-class>com.mypackages.MyValidatorTag</tag-class>  
  15.         <attribute>  
  16.             <name>xxxParam</name>  
  17.             <required>false</required>  
  18.         </attribute>  
  19.     </tag>  
  20. </taglib>  


自定义Validator标签的使用
web.xml
  1.  <taglib>  
  2.   <taglib-uri>/WEB-INF/MyValidator.tld</taglib-uri>  
  3.   <taglib-location>/WEB-INF/MyValidator.tld</taglib-location>  
  4.  </taglib>  



JSP
  1. <%@ taglib uri="WEB-INF/MyValidator.tld" prefix="myv" %>  
  2.   
  3. ...  
  4.   
  5. <h:inputText value="#{mybean.xxxxValue}">  
  6.     <myv:validateMyData xxxParam="Some Parameter"/>  
  7. </h:inputText>  

posted on 2009-04-14 10:58 seal 阅读(3806) 评论(1)  编辑  收藏 所属分类: Seam

评论

# re: JSF Validator(转) 2015-10-15 14:40 asdfdsdfsadfasdfasdfsdf
adsfasdfasdfadsfsdfadsf  回复  更多评论
  


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


网站导航: