JSF下Email验证器完全实例
来源:互联网 发布:淘宝女装退货率在30% 编辑:程序博客网 时间:2024/06/06 14:18
- 利用<f:validator>标签的验证器
- jsf页面通过validatorId调用验证器(该id在faces-config.xml中配置)
-
<h:inputText id="inputTxt"> <h:outputLabel value="#{CusMes.inputTxtLabel}"/> <f:validateLength minimum="5" maximum="20" /> <f:validator validatorId="emailValidator"></f:validator> </h:inputText>
- faces-config.xml中配置(配置调用的自定义验证器类)
<validator> <validator-id>emailValidator</validator-id> <validator-class>com.xgtimes.Validator.emailValidator</validator-class> </validator>
- com.xgtimes.Validator.emailValidator类的实现:该类必须实现Validator 接口及接口抽象方法validate(),且validate()方法要求抛出ValidatorException异常,该异常以FacesMessage为参数抛出,旨在验证失败时,确定向视图发送的消息,如果验证成功则什么也不做,当然如果验证成功也要求发送消息的话,同样抛出ValidatorException异常即可。该类其实很简单,唯一要做的就是,确定在什么情况下应该抛出异常。另外,为了支持国际化,在抛出消息时,采用从资源文件com.xgtimes.CustomMessages.properties获取EMAIL_ERROR_MESSAGE键值,通过fc.getViewRoot().getLocale(),使该消息符合当前语言环境。(注:这里Email验证逻辑不完全规范)
package com.xgtimes.Validator;import java.util.ResourceBundle;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 emailValidator implements Validator { public void validate(FacesContext arg0, UIComponent arg1, Object arg2) throws ValidatorException { String Value=(String)arg2; if(!isValid(Value)){ FacesMessage message=new FacesMessage(FacesMessage.SEVERITY_ERROR,this.getMes(arg0),null); throw new ValidatorException(message); } } private boolean isValid(String value) { boolean isvalid=true; int index=value.indexOf("@"); if(index<=0||index>value.length()-6) { isvalid=false; } return isvalid; } private String getMes(FacesContext fc) { String str=null; ResourceBundle rb=ResourceBundle.getBundle("com.xgtimes.CustomMessages", fc.getViewRoot().getLocale()); str=rb.getString("EMAIL_ERROR_MESSAGE"); return str; }}
- 自定义标签的验证器:这里将提供自定义的验证器标签<xg:emailValidator/>实现验证,而不是利用<f:validator>标准标签,这样有利于重用和扩展,就象利用普通的第三方标签一样方便,只需引入标签库,然后使用即可。
- JSF页面中引入标签库并使用email验证器标签:
-
<%@ taglib prefix="xg" uri="/WEB-INF/tld/xgtags.tld" %>
引入/WEB-INF/tld下的xgtags.tld库,其中对email验证器标签emailValidator进行了定义。以至于我们能在JSF页面中能够使用email验证器标签。
<xg:emailValidator/>
这里会碰到两种问题:
PWC6180:Unable to initialize TldLocationsCache:可能是由于你将xgtags.tld置于tags下面,把它放到其他目录下,比如tld下,为什么不能放在tags下面呢?这是因为Java EE 5中有个特性,就是tags下专门用于放*.tag的文件,该文件是一种不用打包的标记文件,并且不要任何的标记描述文件(TLD)。
Unable to load tag hander class:可能是由于你引入标记库错误,检查uri,也可能是你的标记处理器类没找到,检查你的标记处理器类是否在你的类目录下。
- 标签描述文件(TLD)的配置:关键就是<tag>标记中的<name>和<tag-class>的设置。name的值决定了<xg:emailValidator/>中冒号后的字符串,也就是标记名称。然后用<tag-class>来查找emailValidatorTag类,该类是个标记处理程序。
<?xml version="1.0" encoding="UTF-8"?><taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <tlib-version>1.0</tlib-version> <short-name>xg</short-name> <uri>xgtimes-taglib</uri> <tag> <display-name>Email验证器</display-name> <description>用于验证email格式的合法性</description> <name>emailValidator</name> <tag-class>com.xgtimes.Validator.emailValidatorTag</tag-class> </tag> </taglib>
- emailValidatorTag标记处理程序的实现:该类仅仅就是实现了createValidator方法,该方法唯一做的就是返回一个emailValidator 验证器类。
package com.xgtimes.Validator;import javax.faces.validator.Validator;import javax.faces.webapp.ValidatorELTag;import javax.servlet.jsp.JspException;public class emailValidatorTag extends ValidatorELTag { protected Validator createValidator() throws JspException{ emailValidator validator=new emailValidator(); return validator; }}
- com.xgtimes.Validator.emailValidator类的实现:同上
至此,使用自定义标签的验证器就完成了,这里与使用<f:Validator>操作上不同的地方就是不再需要在faces-config.xml中进行Validator的声明,而是就象普通的标记一样引入标记库,然后直接用就是了。当然要做的还有几步,现在来归纳下使用自定义标记的流程:
- 添加源包:com.xgtimes.Validator中的emailValidator类(注意:还需保证com.xgtimes包中存在CustomMessages.properties,类emailValidator用到它);
- 将xgtags.tld文件拷入/WEB-INF下(注意不能是/WEB-INF/tags),这里我们假设是/WEB-INF/tld下;
- 导入标记库到页:<%@ taglib prefix="xg" uri="/WEB-INF/tld/xgtags.tld" %>;
- 调用标签<xg:emailValidator/>。
- JSF下Email验证器完全实例
- email邮箱登陆验证实例
- JSF复习系列(4)--验证器Validator的简单实例
- jsf验证器创建
- JSF---->标准验证器
- JSF---->自订验证器
- mac下 eclipse+hadoop2.6.0完全配置,实例验证
- JSF自定义验证器标签
- JSF验证器和转换器
- JSF自定义验证器功能
- JSF验证器和转换器
- JSF验证器和转换器
- Jsf之标准验证器
- JSF转换器和验证器
- Email发送器 JavaMail实例
- email验证
- Email验证
- email验证
- 上了三张大床,都没有被......
- javascript小技巧之如何用滑鼠控制Web页面
- 我为什么一把年纪还单身??///
- 研究一下啊
- javascript中取得下拉框的值太麻烦下拉框联动
- JSF下Email验证器完全实例
- 人越大,越难爱
- 屏蔽恼人的QQ迷你首页
- 可可猪:周岁生日快乐!
- 昨天,我把IBM重庆STG的面试给拒了
- 右击鼠标弹出图片另存为对话框
- .NET 中通用的FORMATSTRING格式符整理
- 浏览器和分辨率不同自动调用不同CSS的代码
- Oracle的联机备份