JSF 2.0中的自定义转换器

在本文中,我们向您展示如何在JSF 2.0中创建自定义转换器。

脚步
1.通过实现javax.faces.convert.Converter接口创建一个转换器类。
2.覆盖getAsObject()getAsString()方法。
3.使用@FacesConverter注释分配唯一的转换器ID。
4.通过f:converter标签将您的自定义转换器类链接到JSF组件。

自定义转换器示例

创建JSF 2定制转换器名称“ URLConverter”的详细指南,该名称用于将String转换为URL格式(仅在前面添加HTTP协议:))并将其存储到Object中。

1.文件夹结构

此示例的文件夹结构。

jsf2-custom-converter-example-folder

2.转换器类

通过实现javax.faces.convert.Converter接口创建一个自定义转换器类。

package com.mkyong;

import javax.faces.convert.Converter;
public class URLConverter implements Converter{
	//...
}

覆盖以下两种方法:
1. getAsObject() ,将给定的字符串值转换为Object。
2. getAsString() ,将给定的对象转换为String。

public class URLConverter implements Converter{

	@Override
	public Object getAsObject(FacesContext context, UIComponent component,
			String value) {
		
		//...
	}
	@Override
	public String getAsString(FacesContext context, UIComponent component,
			Object value) {

		//...
		
	}

@FacesConverter注释分配一个转换器ID。

package com.mkyong;

import javax.faces.convert.Converter;
@FacesConverter("com.mkyong.URLConverter")
public class URLConverter implements Converter{
	//...
}

查看完整的自定义转换器源代码:

URLConverter.java

package com.mkyong;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import org.apache.commons.validator.UrlValidator;
 
@FacesConverter("com.mkyong.URLConverter")
public class URLConverter implements Converter{

	@Override
	public Object getAsObject(FacesContext context, UIComponent component,
		String value) {
		
		String HTTP = "http://";
		StringBuilder url = new StringBuilder();

		//if not start with http://, then add it
		if(!value.startsWith(HTTP, 0)){
			url.append(HTTP);
		}
		url.append(value);
		
		//use Apache common URL validator to validate URL
		UrlValidator urlValidator = new UrlValidator();
		//if URL is invalid
		if(!urlValidator.isValid(url.toString())){
			
			FacesMessage msg = 
				new FacesMessage("URL Conversion error.", 
						"Invalid URL format.");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			throw new ConverterException(msg);
		}
		
		URLBookmark urlBookmark = new URLBookmark(url.toString());
		
		return urlBookmark;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component,
			Object value) {

		return value.toString();
		
	}	
}

在此自定义转换器类中,给定转换器ID为“ com.mkyong.URLConverter ”,并将任何给定的String(通过在前面添加“ http”)转换为“ URLBookmark ”对象。

另外,如果URL验证失败,则返回带有声明的错误消息的FacesMessage对象。

URLBookmark.java

package com.mkyong;

public class URLBookmark{
	
	String fullURL;

	public URLBookmark(String fullURL) {
		this.fullURL = fullURL;
	}

	public String getFullURL() {
		return fullURL;
	}

	public void setFullURL(String fullURL) {
		this.fullURL = fullURL;
	}
	
	public String toString(){
		return fullURL;
	}
	
}

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 bookmarkURL;

	public String getBookmarkURL() {
		return bookmarkURL;
	}

	public void setBookmarkURL(String bookmarkURL) {
		this.bookmarkURL = bookmarkURL;
	}

}

4. JSF页面

通过“ f:converter ”标签中的“ converterId ”属性将上述自定义转换器链接到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 converter in JSF 2.0</h1>
		
	<h:form>
		
	  <h:panelGrid columns="3">
			
		Enter your bookmark URL :
				
		<h:inputText id="bookmarkURL" value="#{user.bookmarkURL}" 
			size="20" required="true" label="Bookmark URL">
			<f:converter converterId="com.mkyong.URLConverter" />
		</h:inputText>
				
		<h:message for="bookmarkURL" 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"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      >
    <h:body>
    	
    	<h1>Custom converter in JSF 2.0</h1>
			
	  <h:panelGrid columns="2">
			
		Bookmark URL :  
		<h:outputText value="#{user.bookmarkURL}" />
				
	  </h:panelGrid>
			
    </h:body>
</html>

5.演示

输入有效的URL,不带“ http”。

jsf2-custom-converter-example-1

在有效网址之前添加“ http”并显示它。

jsf2-custom-converter-example-2

如果提供了无效的URL,则返回声明的错误消息。

jsf2-custom-converter-example-3

下载源代码

下载它– JSF-2-Custom-Converter-Example.zip (11KB)

参考

  1. J2EE doc –创建自定义转换器

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值