<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>新建网页 1</title>
</head>
<body>
<p>自订转换, 验证标签</p>
<div id="PageContent">
<table cellSpacing="0" cellPadding="0" width="100%" border="0" id="table3">
<tr>
<td class="pagebody" vAlign="top">
<table style="CLEAR: both" cellSpacing="0" cellPadding="0" width="100%" border="0" id="table4">
<tr>
<td class="pagecontent" vAlign="top" width="100%">
<div class="wiki-content">
在 <span class="nobr">
<a title="Visit page outside Confluence" rel="nofollow" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2694">
自订验证器<sup><img class="rendericon" height="7" alt="" src="http://www.javaworld.com.tw/confluence/images/icons/linkext7.gif" width="7" align="absMiddle" border="0"></sup></a></span>
中,我们的验证器只能验证一种pattern(.+[0-9]+),我们希望可以在JSF页面上自订匹配的pattern,然而由于我们使用<f:
validator>这个通用的验证器标签,为了要能提供pattern属性,我们可以使用<f:attribute>标签来设置,例如:<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<div class="codeContent">
<pre class="code-java">....
<h:inputSecret value=<span class="code-quote">"#{user.password}"</span> required=<span class="code-quote">"<span class="code-keyword">true</span>"</span>>
<f:validator validatorId=<span class="code-quote">"onlyfun.caterpillar.Password"</span>/>
<f:attribute name=<span class="code-quote">"pattern"</span> value=<span class="code-quote">".+[0-9]+"</span>/>
</h:inputSecret><p>
....</pre>
</div>
</div>
<p> 使用<f:attribute>卷标来设定属性,接着我们可以如下取得所设定的属性:</p>
<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<div class="codeContent">
<pre class="code-java">....
<span class="code-keyword">public</span> void validate(FacesContext context,
UIComponent component,
<span class="code-object">Object</span> obj)
<span class="code-keyword">throws</span> ValidatorException {
....
<span class="code-object">String</span> pattern = (<span class="code-object">String</span>)
component.getAttributes().get(<span class="code-quote">"pattern"</span>);
....
}
....</pre>
</div>
</div>
<p> 您也可以开发自己的一组验证卷标,并提供相关属性设定,这需要了解JSP Tag
Library的撰写,所以请您先参考 <span class="nobr">
<a title="Visit page outside Confluence" rel="nofollow" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=869">
JSP/Servlet<sup><img class="rendericon" height="7" alt="" src="http://www.javaworld.com.tw/confluence/images/icons/linkext7.gif" width="7" align="absMiddle" border="0"></sup></a></span>
中有关于JSP Tag Library的介绍。</p>
<p>
要开发验证器转用标签,您可以直接继承javax.faces.webapp.ValidatorTag,这个类别可以帮您处理大部份的细节,您所需要的,就是重新定义它的createValidator()方法,我们以改写
<span class="nobr">
<a title="Visit page outside Confluence" rel="nofollow" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2694">
自订验证器<sup><img class="rendericon" height="7" alt="" src="http://www.javaworld.com.tw/confluence/images/icons/linkext7.gif" width="7" align="absMiddle" border="0"></sup></a></span>
中的PasswordValidator为例:</p>
<ul>
<li>PasswordValidator.java </li>
</ul>
<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
<b>PasswordValidator.java</b></div>
<div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> onlyfun.caterpillar;
<span class="code-keyword">import</span> javax.faces.application.FacesMessage;
<span class="code-keyword">import</span> javax.faces.component.UIComponent;
<span class="code-keyword">import</span> javax.faces.context.FacesContext;
<span class="code-keyword">import</span> javax.faces.validator.Validator;
<span class="code-keyword">import</span> javax.faces.validator.ValidatorException;
<span class="code-keyword">public</span> class PasswordValidator <span class="code-keyword">implements</span> Validator {
<span class="code-keyword">private</span> <span class="code-object">String</span> pattern;
<span class="code-keyword">public</span> void setPattern(<span class="code-object">String</span> pattern) {
<span class="code-keyword">this</span>.pattern = pattern;
}
<span class="code-keyword">public</span> void validate(FacesContext context,
UIComponent component,
<span class="code-object">Object</span> obj)
<span class="code-keyword">throws</span> ValidatorException {
<span class="code-object">String</span> password = (<span class="code-object">String</span>) obj;
<span class="code-keyword">if</span>(password.length() < 6) {
FacesMessage message = <span class="code-keyword">new</span> FacesMessage(
FacesMessage.SEVERITY_ERROR,
<span class="code-quote">"字符长度小于6"</span>, <span class="code-quote">"字符长度不得小于6"</span>);
<span class="code-keyword">throw</span> <span class="code-keyword">new</span> ValidatorException(message);
}
<span class="code-keyword">if</span>(pattern != <span class="code-keyword">null</span> && !password.matches(pattern)) {
FacesMessage message = <span class="code-keyword">new</span> FacesMessage(
FacesMessage.SEVERITY_ERROR,
<span class="code-quote">"密码必须包括字符与数字"</span>,
<span class="code-quote">"密码必须是字符加数字所组成"</span>);
<span class="code-keyword">throw</span> <span class="code-keyword">new</span> ValidatorException(message);
}
}
}</pre>
</div>
</div>
<p>
主要的差别是我们提供了pattern属性,在validate()方法中进行验证时,是根据我们所设定的pattern属性,接着我们继承javax.faces.webapp.ValidatorTag来撰写自己的验证标签:</p>
<div class="code" style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<div class="codeHeader" style="BORDER-BOTTOM-STYLE: solid">
<b>PasswordValidatorTag.java</b></div>
<div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> onlyfun.caterpillar;
<span class="code-keyword">import</span> javax.faces.application.Application;
<span class="code-keyword">import</span> javax.faces.context.FacesContext;
<span class="code-keyword">import</span> javax.faces.validator.Validator;
<span class="code-keyword">import</span> javax.faces.webapp.ValidatorTag;
<span class="code-keyword">public</span> class PasswordValidatorTag <span class="code-keyword">extends</span> ValidatorTag {
<span class="code-keyword">private</span> <span class="code-object">String</span> pattern;
<span class="c
没有合适的资源?快使用搜索试试~ 我知道了~
JSF入门
共54个文件
htm:35个
jpg:16个
gif:2个
需积分: 0 102 下载量 116 浏览量
2008-06-04
15:29:21
上传
评论
收藏 171KB RAR 举报
温馨提示
JSF入门简体中文版
资源详情
资源评论
资源推荐
收起资源包目录
《JSF入门》简体中文版.rar (54个子文件)
《JSF入门》简体中文版
动作事件.htm 10KB
自订 Renderer.htm 13KB
编码, 译码.htm 11KB
自订转换器.htm 13KB
错误讯息处理.htm 12KB
使用自订组件.htm 5KB
TableModel 类别.htm 8KB
自订验证器.htm 8KB
Backing Beans.htm 5KB
选择类标签 二.htm 6KB
命令类标签.htm 3KB
输入类标签.htm 2KB
简单的导航 Navigation.htm 9KB
Beans 上的 List, Map.htm 5KB
自订转换, 验证标签.htm 16KB
其它标签.htm 6KB
表头, 表尾.htm 6KB
组件卷标.htm 11KB
简介JSF.htm 9KB
简介 JSF 标准标签.htm 5KB
值变事件.htm 10KB
概述自订组件.htm 4KB
JSF Expression Language.htm 14KB
JSF 生命周期.htm 5KB
images
selectionTag1-1.jpg 1KB
selectionTag1-4.jpg 3KB
standardConverters-1.jpg 7KB
immediateEvents-2.jpg 9KB
selectionTag1-2.jpg 3KB
selectionTag1-3.jpg 3KB
linkext7.gif 166B
docs_16.gif 614B
immediateEvents-1.jpg 10KB
selectionTag1-5.jpg 1KB
standardConverters-2.jpg 8KB
Thumbs.db 45KB
tablemodel-1.jpg 9KB
encodeDecode-1.jpg 2KB
selectionTag1-6.jpg 2KB
headerfooter-2.jpg 7KB
selectionTag1-8.jpg 1KB
selectionTag1-7.jpg 2KB
selectionTag1-9.jpg 1KB
标准转换器.htm 8KB
选择类标签 一.htm 9KB
实时事件.htm 14KB
简单的表格.htm 9KB
Phase 事件.htm 7KB
输出类标签.htm 5KB
国际化讯息.htm 9KB
第一个JSF程序.htm 9KB
导航规则设置.htm 6KB
JSF入门.htm 7KB
标准验证器.htm 6KB
共 54 条
- 1
ljnmagic
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0