JSF实现自定义验证程序

如果您使用JSP作为Web应用程序的视图(通常是这样的),那么您就可以使用 <faces:validator>标签来为JSF组件指定验证程序,如下面的代码所示: 上面的代码片断将一个验证程序与一个文本字段关联起来。您只要使用<faces:validate>标签的className属性来指定验证程序的类名。上面指定的验证程序是一个JSF内置的验证程序,用于确保一个组件的值不为null。JSF提供了很多内置的验证程序,但您也可以实现自己的验证程序,并将它们与一个JSF组件关联起来。

< faces:textentry_input  id ='name'> 
   
<faces:validator className ='javax.faces.validator.RequiredValidator'/>
</faces:textentry_input >

 

 

<! DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN' >
< html >
   
< head >
      
< title > A Simple JavaServer Faces Application </ title >
   
</ head >

   
< body >
      
<% @ taglib uri='http://java.sun.com/j2ee/html_basic/' prefix='faces' %>

      
<font size='4'>Please enter your name and password</font>

      
<faces:usefaces>
         
<faces:form id='simpleForm' formName='simpleForm'>
            <table>
               
<tr>
                  
<td>Name:</td>
                  
<td>
                     
<faces:textentry_input id='name'> 
                           <faces:validator 
                                  className
='com.sabreware.validators.NameValidator'/>
                           <faces:validator 
                                  className
='javax.faces.validator.LengthValidator'/>
                           <faces:attribute 
                                       name
='javax.faces.validator.LengthValidator.MINIMUM'
                                  value='3'/>
                       </faces:textentry_input>
                  
</td>

                  
<td>
                     
<faces:validation_message componentId='name'/>
                  </td>
               
</tr>

               
<tr>
                  
<td>Password:</td>
                  
<td>
                     
<faces:textentry_secret id='password'/> 
                  </td>
               
</tr>
            
</table>

            
<p><faces:command_button id='submit' commandName='Log In'/>
         </faces:form>
      
</faces:usefaces>
   
</body>
</html>
前述的JSP页面使用 <faces:validator>标签来将验证程序与一个JSF组件关联起来。在这种情形中,验证程序是一个验证用户名的自定义验证程序和一个JSF内置验证程序,用于保证用户名至少有3个字符长。

 

清单2中列出了清单1中使用的自定义验证程序。

清单2. WEB-INF/classes/com/sabreware/validators/NameValidator.java

package  com.sabreware.validators;

import  java.util.Iterator;
import  javax.faces.component.UIComponent;
import  javax.faces.component.AttributeDescriptor;
import  javax.faces.context.FacesContext;
import  javax.faces.context.Message;
import  javax.faces.context.MessageImpl;
import  javax.faces.validator.Validator;

public   class  NameValidator  implements  Validator  {
   
public AttributeDescriptor getAttributeDescriptor(String attributeName) {
      
return null;   
   }

   
public Iterator getAttributeNames() {
      
return null;   
   }

   
public void validate(FacesContext context, UIComponent component) {
      String name 
= (String)component.getValue();

      
if(!"phillip".equalsIgnoreCase(name)) {
         context.addMessage(component,
            
new MessageImpl(Message.SEVERITY_ERROR, "bad username",
                        
"The username " + name + " is invalid"));
      }

   }

}




 

 

前述的验证程序实现了javax.faces.validator.Validator接口,而该接口定义了以下方法:

  • void validate(FacesContext, UIComponent)
  • Iterator getAttributeNames(String)
  • AttributeDescriptor getAttributeDescriptor(String)

validate()方法为指定的组件执行实际的验证。 Validator接口定义的另外两个方法被工具用来发现与特定验证程序相关的属性(及其描述)。在这种情形下,验证程序没有任何属性,因此getAttributeDescriptor()和getAttributeNames()方法只返回null。

如果组件的值是有效的,那么验证程序的validate()方法就什么都不做。如果其值是无效的,validator()方法就会创建消息将其添加到JSF上下文中。所有的这一切发生在JSF生命周期的Process Validations阶段。如果一个组件验证失败(表明已经将消息添加到JSF上下文中),JSF实现就直接进入Render Response阶段。否则,生命周期进入Apply Model Values阶段 

 

原文摘自(有删改):http://www.dmresearch.net/it-doc/1000000317/1000063243.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值