⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 自订验证器.htm

📁 良葛格學習筆記,《jsf入门》简体中文版,对学习JSF有帮助
💻 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() &lt; 6) {
            FacesMessage message = <span class="code-keyword">new</span> FacesMessage(
                 FacesMessage.SEVERITY_ERROR,
                 <span class="code-quote">&quot;字符长度小于6&quot;</span>,
                 <span class="code-quote">&quot;字符长度不得小于6&quot;</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">&quot;.+[0-9]+&quot;</span>)) {
            FacesMessage message = <span class="code-keyword">new</span> FacesMessage(
                   FacesMessage.SEVERITY_ERROR,
                   <span class="code-quote">&quot;密码必须包括字符与数字&quot;</span>,
                   <span class="code-quote">&quot;密码必须是字符加数字所组成&quot;</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)、讯息概述与详细讯息内容,这些讯息将可以使用&lt;h:messages&gt;或&lt;h:
						message&gt;卷标显示在页面上。</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">&lt;?xml version=<span class="code-quote">&quot;1.0&quot;</span>?&gt;
 &lt;!DOCTYPE faces-config PUBLIC
 <span class="code-quote">&quot;-<span class="code-comment">//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN&quot;</span>
</span> <span class="code-quote">&quot;http:<span class="code-comment">//java.sun.com/dtd/web-facesconfig_1_0.dtd&quot;</span>&gt;
</span>
 &lt;faces-config&gt;
 ....
    &lt;validator&gt;
        &lt;validator-id&gt;
            onlyfun.caterpillar.Password
        &lt;/validator-id&gt;
        &lt;validator-class&gt;
            onlyfun.caterpillar.PasswordValidator
        &lt;/validator-class&gt;
    &lt;/validator&gt;
 ....
 &lt;/faces-config&gt;</pre>
							</div>
						</div>
						<p>  要使用自订的验证器,我们可以使用&lt;f:validator&gt;卷标并设定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">....
 &lt;h:inputSecret value=<span class="code-quote">&quot;#{user.password}&quot;</span> required=<span class="code-quote">&quot;<span class="code-keyword">true</span>&quot;</span>&gt;
    &lt;f:validator validatorId=<span class="code-quote">&quot;onlyfun.caterpillar.Password&quot;</span>/&gt;
 &lt;/h:inputSecret&gt;&lt;p&gt;
 ....</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() &lt; 6) {
            FacesMessage message = <span class="code-keyword">new</span> FacesMessage(
                 FacesMessage.SEVERITY_ERROR,
                 <span class="code-quote">&quot;字符长度小于6&quot;</span>,
                 <span class="code-quote">&quot;字符长度不得小于6&quot;</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">&quot;.+[0-9]+&quot;</span>)) {
            FacesMessage message = <span class="code-keyword">new</span> FacesMessage(
                   FacesMessage.SEVERITY_ERROR,
                   <span class="code-quote">&quot;密码必须包括字符与数字&quot;</span>,
                   <span class="code-quote">&quot;密码必须是字符加数字所组成&quot;</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">.....
 &lt;h:inputSecret value=<span class="code-quote">&quot;#{user.password}&quot;</span>
                required=<span class="code-quote">&quot;<span class="code-keyword">true</span>&quot;</span>
                validator=<span class="code-quote">&quot;#{user.validate}&quot;</span>/&gt;
 ....</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 + -