在开始本文之前,建议阅读下面的文章:
以了解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属性简单地验证表单元素是否得到输入。
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"));
- }
- }
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中:
便可。
错误消息的显示稍后再作介绍。
validator标签的使用
validator标签可以接收参数,所以功能上比较强大,也比较灵活。同时,除了使用jsf标准的validator标签之外,你还可以自定义validator标签。关于自定义validator标签我们将在另外的文章中加以介绍。
validator标签的使用例:
上
例对id为xxxxvalue的输入框组件的输入值做double范围验证,指定范围最大值为5。超过5的情况则显示错误消息,错误消息可以使
用
或者标签显示。有关消息处理的详细介绍请参考:
一文
f:validator标签的使用与validator id
除了以上2种验证方法之外,还可以使用f:validator标签对输入值加以验证。f:validator标签需要指定validatorid属性,validator id需要在faces-config.xml配置文件中加以配置。
f:validator标签的使用例:
"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的机制,特点,种类,以及使用方法等。
本文将介绍怎么自定义validator和validator标签。
自定义validator有2种方法:一种是method validator,我们在 一文中已作了介绍,这里不再详述;另一种是通过实现validator接口,也就是使用自定义的validator类。
自定义validator类与validator标签有以下几个步骤:
自定义validator类的实现
faces-config.xml登录
自定义validator标签类
设置tld文件
自定义validator类的实现
定义一个类,该类实现javax.faces.validator.validaotr接口:
myvalidator.java
- package com.mypackages;
-
- import javax.faces.validator.validaotr;
-
- public class myvalidator implements validator {
- public void validate(facescontext context, uicomponent component, object value)
- throws validatorexception {
-
- string text = value.tostring();
- if(!text.equals("xxxx")){
- throw new validatorexception(new facesmessage("some message"));
- }
- }
-
- ... //其它参数设置,方法等(略)
- }
package com.mypackages;
import javax.faces.validator.validaotr;
public class myvalidator implements validator {
public void validate(facescontext context, uicomponent component, object value)
throws validatorexception {
string text = value.tostring();
if(!text.equals("xxxx")){
throw new validatorexception(new facesmessage("some message"));
}
}
... //其它参数设置,方法等(略)
}
faces-config.xml登录
自定义validator类之后,还得向faces-config.xml登录之后才能使用。
faces-config.xml
-
- "-//sun microsystems, inc.//dtd javaserver faces config 1.0//en"
- "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
-
-
-
-
- myvalidator
- com.mypackages.myvalidator
-
-
myvalidator
com.mypackages.myvalidator
经过上面2个步骤,就可以使用myvalidator了。
例:
自定义validator标签类
上面的myvalidator虽然可以通过f:validator标签加以利用, 但不能向其传入参数,若要向其传入参数,则需要定义自定义validator标签类。
myvalidatortag.java
- package com.mypackages;
-
- import javax.faces.webapp.validatortag;
-
- public class myvalidatortag extends validatortag{
-
- private string xxxparam;
-
- public myvalidatortag(){
- setvalidatorid("myvalidator");
- }
-
- protected validator createvalidator() throws jspexception {
- myvalidator validator = (myvalidator)super.createvalidator();
- validator.setxxxparam(xxxparam);
- return validator;
- }
-
- public string getxxxparam() {
- return xxxparam;
- }
-
- public void setxxxparam(string xxxparam) {
- this.xxxparam = xxxparam;
- }
- }
package com.mypackages;
import javax.faces.webapp.validatortag;
public class myvalidatortag extends validatortag{
private string xxxparam;
public myvalidatortag(){
setvalidatorid("myvalidator");
}
protected validator createvalidator() throws jspexception {
myvalidator validator = (myvalidator)super.createvalidator();
validator.setxxxparam(xxxparam);
return validator;
}
public string getxxxparam() {
return xxxparam;
}
public void setxxxparam(string xxxparam) {
this.xxxparam = xxxparam;
}
}
另外,为myvalidator.java加入相应参数及方法实现。
tld文件
定义好validator标签类之后,还需要在tld文件设置,有关tld这里就不介绍了。请大家参考相关资料。
myvalidator.tld
-
- public "-//sun microsystems, inc.//dtd jsp tag library 1.2//en"
- "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-
- 1.0
- 1.2
- myv
- my validator tag
- my validator tag
-
-
- validatemydata
- com.mypackages.myvalidatortag
-
- xxxparam
- false
-
-
-
1.0
1.2
myv
my validator tag
my validator tag
validatemydata
com.mypackages.myvalidatortag
xxxparam
false
自定义validator标签的使用
web.xml
-
- /web-inf/myvalidator.tld
- /web-inf/myvalidator.tld
-
/web-inf/myvalidator.tld
/web-inf/myvalidator.tld
jsp
- <%@ taglib uri="web-inf/myvalidator.tld" prefix="myv" %>
-
- ...
-
-
-
-
<%@ taglib uri="web-inf/myvalidator.tld" prefix="myv" %>
...