📄 自订验证器.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<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">
您可以自订自己的验证器,所需要的是实作javax.faces.validator.Validator接口,例如我们实作一个简单的密码验证器,检查字符长度,以及密码中是否包括字符与数字:<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">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>(!password.matches(<span class="code-quote">".+[0-9]+"</span>)) {
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>
您要实作javax.faces.validator.Validator接口中的validate()方法,如果验证错误,则丢出一个ValidatorException,它接受一个FacesMessage对象,这个对象接受三个参数,分别表示讯息的严重程度(INFO、
WARN、ERROR、FATAL)、讯息概述与详细讯息内容,这些讯息将可以使用<h:messages>或<h:
message>卷标显示在页面上。</p>
<p> 接下来要在faces-config.xml中注册验证器的识别(Validater
ID),要加入以下的内容:</p>
<ul>
<li>faces-config.xml </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>faces-config.xml</b></div>
<div class="codeContent">
<pre class="code-java"><?xml version=<span class="code-quote">"1.0"</span>?>
<!DOCTYPE faces-config PUBLIC
<span class="code-quote">"-<span class="code-comment">//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"</span>
</span> <span class="code-quote">"http:<span class="code-comment">//java.sun.com/dtd/web-facesconfig_1_0.dtd"</span>>
</span>
<faces-config>
....
<validator>
<validator-id>
onlyfun.caterpillar.Password
</validator-id>
<validator-class>
onlyfun.caterpillar.PasswordValidator
</validator-class>
</validator>
....
</faces-config></pre>
</div>
</div>
<p> 要使用自订的验证器,我们可以使用<f:validator>卷标并设定validatorId属性,例如:</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">....
<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>/>
</h:inputSecret><p>
....</pre>
</div>
</div>
<p>
您也可以让Bean自行负责验证的工作,可以在Bean上提供一个验证方法,这个方法没有传回值,并可以接收FacesContext、UIComponent、Object三个参数,例如:</p>
<ul>
<li>UserBean.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>UserBean.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.ValidatorException;
<span class="code-keyword">public</span> class UserBean {
....
<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>(!password.matches(<span class="code-quote">".+[0-9]+"</span>)) {
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> 接着可以在页面下如下使用验证器:</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">.....
<h:inputSecret value=<span class="code-quote">"#{user.password}"</span>
required=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
validator=<span class="code-quote">"#{user.validate}"</span>/>
....</pre>
</div>
</div>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<p> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -