在本文中,我们向您展示如何在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.文件夹结构
此示例的文件夹结构。
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”。
在有效网址之前添加“ http”并显示它。
如果提供了无效的URL,则返回声明的错误消息。
下载源代码
下载它– JSF-2-Custom-Converter-Example.zip (11KB)