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

(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参数设置,适用于工程设计、参数反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法和数值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次数;②在无法解析求导或函数高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参数优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函数或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值