天宇的JAVA空间站


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

2007-12-19 22:22Update
TAGS: jsf | validator

LifevV.COM编辑部

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里实现一个类似以下的方法:
public void validateXxxx(FacesContext context, 
        UIComponent component, Object value){

    String text = value.toString();
    if(!text.equals("xxxx")){
        throw new ValidatorException(new FacesMessage("some message"));
    }
}

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

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

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


Validator标签的使用


Validator标签可以接收参数,所以功能上比较强大,也比较灵活。同时,除了使用JSF标准的Validator标签之外,你还可以自定义Validator标签。关于自定义Validator标签我们将在另外的文章中加以介绍。
Validator标签的使用例:
<h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">
 <f:validateDoubleRange maximum="5"></f:validateDoubleRange>
</h:inputText>
<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标签的使用例:
<h:inputText id="xxxxValue" value="#{mybean.xxxxValue}" required="true">
  <f:validator validatorId="Some Validator ID"></f:validator>
</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。
 
Copyright ©2006-2010 lifevv.com. All Rights Reserved
POWERED BY @pmplat.syboos.com