Java Server Faces(JSF)___验证器,validate标记实现,实现Validator接口


Java Server Faces(JSF)___验证器,validate标记实现,实现Validator接口


前言:

这个内容其实也很简单,跟 JSF转换器应用几乎相同。
验证器一般用于和UI组件相关联

1.使用标准转换器
  • 主要的标记有:
       <c:validateDoubleRange>
       <c:validateLength>
       <c:validateLongRange>
       <c:validateRequired>
       <c:validateRegex>
    

注:除了<c:validateRegex>、<c:validateRequired>标记以外,其余验证器标记都包含两个属性minimummaximum用于表示用户输入数值的范围。

  • 例如:
    	<h:inputText value="#{beanName.property}" validatorMessage = "error message">
    		<c:validateLongRange minimum="200" maximum="1000" />
    	</h:inputText>
    
2.实质:就是跟UI组件搭配使用,常用来处理用户输入的数据;
  • 比如:验证用户输入的数值范围为100~200

    	<h:inputText value="#{beanName.property}" validatorMessage = "error message">
    			<c:validateLength minimum="100" maximum="200" />
    	</h:inputText>
    
3.创建自定义转换器:

注:除了JSF里面的内置转换器,你还可以创建自定义转换器;

  • 实现步骤
    (1).实现 Validator 接口,重写 validat() 方法;
    (2).将该类注册为自定义验证器 ;
    (3).与 UI组件 相关联 ;

    void validate(FaceContext context,UIComponent component,Object value):此方法用于编写逻辑代码,实现自定义验证;

  • 定义自定义类 (bean)

    	public class myValidator implements Validator{
    		public myValidator() {
    			// TODO Auto-generated constructor stub
    		}
    		
    		public void validate(FaceContext context,UIComponent component,String newValue) throws ConverterException {
    			//逻辑代码放在这;
    		}
    
  • 注册成为自定义转换器(有两种方式供选择)

    第一种:在 face.config.xml 中进行配置

    	<validator>
    		<validator-id></validator-id>   //自己定义的id,用于跟 UI 组件相关联;
    		<validator-class></validator-class>  //自己定义的类名;
    	</validator>
    

    第二种:在类之前添加批注@FacesValidator( value = " 自己定义的id,用于跟UI 组件绑定");使用批注时,需要导入相应的包;

    	@FacesValidator( value  = " 自己定义的id,用于跟UI 组件绑定");
    
  • 将转换器添加到 UI 组件
    1.使用用户界面的converter属性;

    	<h:inputText value="#{beanName.property}" validator="validator.id"></h:inputText>
    

    2.使用< converter >标记

       <h:inputText value="#{beanName.property}">
       	<c:validator validatorId="validator.id" />
       </h:inputText>
    
4.案例( 编写自定义转换器, )
  • 实现Validator接口

        public class myValidator implements Validator{
      		public myValidator() {
      		// TODO Auto-generated constructor stub
      		}
      	
      		public void validate(FaceContext context,UIComponent component,String newValue) throws ValidatorException {
      			Date expDate = (Date)value;
      			Date current = new Date();
      			if(expDate.compareTo(current) <= 0) {
      				FacesMessage message = new FacesMessage();
      				message.setSummary("Invalid card!");
      				message.setServerity(FacesMessage.SEVERITY_ERROR);
      				throw new ValidatorException(message);
      			}
      		}
      	}
    
  • 将该类注册为自定义转换器在 (* 在face.config.xml 中进行配置* )

       	<validator>
       		<validator-id>myValidator</validator-id>   //自己定义的id,用于跟 UI 组件相关联;
       		<validator-class>myValidator</validator-class>  //自己定义的类名;
       	</validator>
    
  • 将自定义转换器跟UI组件相关联

    	<h:inputText value="#{beanName.property}" validator="myValidator"></h:inputText>
    

:这里只是用了第一种方式来进行自定义转换器的应用,第二种方式也很简单,这里就不在举例。

更多详细的内容,请查看:
link(https://blog.csdn.net/u012889434/article/details/50635891).

发布了56 篇原创文章 · 获赞 51 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43495629/article/details/90301963