Пользовательский конвертер в JSF 2.0

Пользовательский конвертер в 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. Структура папок

Структура папок этого примера.

jsf2-custom-converter-example-folder

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».

jsf2-custom-converter-example-1

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

jsf2-custom-converter-example-2

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

jsf2-custom-converter-example-3

Скачать исходный код

Скачать -JSF-2-Custom-Converter-Example.zip (11 КБ)