JSF 2.0中的自定义验证器

在本文中,我们将向您展示如何在JSF 2.0中创建自定义验证器

脚步

  1. 通过实现javax.faces.validator.Validator接口创建一个验证器类。
  2. 重写validate()方法。
  3. 通过@FacesValidator注释分配唯一的验证者ID。
  4. 通过f:validator标记将自定义验证器类引用到JSF组件。

创建自定义验证程序名称“ EmailValidator”的详细指南-通过Java正则表达式验证电子邮件地址。

1.文件夹结构

该项目的目录结构。

jsf2-custom-validator-folder

2.验证者类

创建一个自定义验证器类,并实现javax.faces.validator.Validator接口。

package com.mkyong;

import javax.faces.validator.Validator;
public class EmailValidator implements Validator{
	//...
}

重写validate()方法。

public class EmailValidator implements Validator{

	public void validate(FacesContext context, UIComponent component,
			Object value) throws ValidatorException {
		//...
	}
}

使用@FacesValidator分配唯一的验证者ID。

package com.mkyong;

import javax.faces.validator.Validator;

@FacesValidator("com.mkyong.EmailValidator")
public class EmailValidator implements Validator{
	//...
}

查看完整的自定义验证器类:

EmailValidator.java
package com.mkyong;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("com.mkyong.EmailValidator")
public class EmailValidator implements Validator{

	private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\." +
			"[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*" +
			"(\\.[A-Za-z]{2,})$";

	private Pattern pattern;
	private Matcher matcher;
	
	public EmailValidator(){
		  pattern = Pattern.compile(EMAIL_PATTERN);
	}
	
	@Override
	public void validate(FacesContext context, UIComponent component,
			Object value) throws ValidatorException {
		
		matcher = pattern.matcher(value.toString());
		if(!matcher.matches()){
			
			FacesMessage msg = 
				new FacesMessage("E-mail validation failed.", 
						"Invalid E-mail format.");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			throw new ValidatorException(msg);

		}

	}
}

上面是一个自定义验证器类,其标识为com.mkyong.EmailValidator 。 如果电子邮件无效,则返回FacesMessage错误消息。

注意
有关电子邮件正则表达式模式的详细说明,请参阅此“ 使用Java正则表达式验证电子邮件 ”文章。

3.托管豆

一个普通的托管bean,名为“用户”,这里没有什么特别的。

package com.mkyong;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
 
@ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable{
	
	String email;

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}

4. JSF页面

上面的自定义验证器通过f:validator标记中的“ validatorId ”属性引用JSF组件。

Spring DI到JSF定制验证器
如果您需要@Autowired到JSF自定义验证器中,请使用binding而不是validatorId 。 阅读这篇文章– Spring @Autowired到JSF自定义验证器中

default.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      >
    <h:body>
    	
    <h1>Custom validator in JSF 2.0</h1>
		
	  <h:form>
		
		<h:panelGrid columns="3">
			
		  Enter your email :
				
		  <h:inputText id="email" value="#{user.email}" 
			size="20" required="true" label="Email Address">
			
			<f:validator validatorId="com.mkyong.EmailValidator" />
			
		  </h:inputText>
				
		  <h:message for="email" style="color:red" />
			
		</h:panelGrid>
			
		<h:commandButton value="Submit" action="result" />
			
	   </h:form>
	
    </h:body>
</html>
result.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html"
      >
    <h:body>
    	
    	<h1>Custom validator in JSF 2.0</h1>
			
	  <h:panelGrid columns="2">
			
		Email Address :  
		<h:outputText value="#{user.email}" />
				
	  </h:panelGrid>
			
    </h:body>
</html>

5.演示

通过自定义验证器验证电子邮件地址,如果电子邮件地址无效,则返回错误消息。

jsf2-custom-validator-example

下载源代码

下载它-JSF-2-Custom-Validator-Example (10KB)

参考文献

  1. 使用Java Regex进行电子邮件验证
  2. JSF 2.0中的自定义转换器

翻译自: https://mkyong.com/jsf2/custom-validator-in-jsf-2-0/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值