Пользовательский конвертер в JSF 2.0
В этой статье мы покажем вам, как создать собственный конвертер в JSF 2.0.
Steps
1. Создайте класс преобразователя, реализовав интерфейсjavax.faces.convert.Converter.
2. Отменить оба методаgetAsObject() иgetAsString().
3. Назначьте уникальный идентификатор преобразователя с аннотацией@FacesConverter.
4. Свяжите свой собственный класс конвертера с компонентом JSF с помощью тегаf:converter.
Пример пользовательского конвертера
Подробное руководство по созданию пользовательского конвертера JSF 2 с именем «URLConverter», которое используется для преобразования строки в формат URL (добавить протокол HTTP только спереди :)) и сохранения его в объекте.
1. Структура папок
Структура папок этого примера.

2. Конвертер класса
Создайте собственный класс преобразователя, реализовав интерфейсjavax.faces.convert.Converter.
package com.example;
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.
package com.example;
import javax.faces.convert.Converter;
@FacesConverter("com.example.URLConverter")
public class URLConverter implements Converter{
//...
}
Смотрите полный пользовательский исходный код конвертера:
URLConverter.java
package com.example;
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.example.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();
}
}
В этом пользовательском классе преобразователя ему присваивается идентификатор преобразователя как «com.example.URLConverter», и он преобразует любую заданную строку (путем добавления «http» впереди) в объект «URLBookmark».
Кроме того, если проверка URL-адреса завершилась неудачно, верните объектFacesMessage с объявленным сообщением об ошибке.
URLBookmark.java
package com.example;
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. Управляемый Боб
Нормальный управляемый бин с именем «пользователь», здесь ничего особенного.
package com.example;
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
Свяжите указанный выше пользовательский преобразователь с компонентом JSF через атрибут «converterId» в теге «f:converter».
default.xhtml
Custom converter in JSF 2.0
Enter your bookmark URL :
result.xhtml
Custom converter in JSF 2.0
Bookmark URL :
5. Demo
Введите действительный URL, без «http».

Добавьте «http» перед действующим URL и отобразите его.

Если указан неверный URL, верните объявленное сообщение об ошибке.

Скачать исходный код
Скачать -JSF-2-Custom-Converter-Example.zip (11 КБ)