Почему нельзя использовать несколько конвертеров для одного держателя значения? - PullRequest
3 голосов
/ 12 июля 2011

Этим утром у меня была причина попробовать использовать несколько конвертеров для компонента inputText, и я понял, что это не работает.

Кто-нибудь, кто почему JSF позволяет только один конвертер для ValueHolder? Кажется, что использование ряда конвертеров было бы элегантно в нескольких ситуациях.

1 Ответ

11 голосов
/ 13 июля 2011

В JSF интерфейс Converter разработан с единственной целью:

Конвертер - это интерфейс, описывающий класс Java, который может выполнять преобразования объектов в строки и строки в объекты между объектами данных модели и строковое представление тех объектов, которые подходят для рендеринга.

...

getAsObject Преобразование указанного строкового значения, связанного с указанным UIComponent, в объект данных модели, который подходит для хранения на этапе Применить значения запроса жизненного цикла обработки запроса .

getAsString Преобразование указанного значения объекта модели, связанного с указанным UIComponent, в строку, подходящую для включения в ответ, сгенерированный во время фазы Ответ визуализации запроса. жизненный цикл обработки.

Ни в Javadoc, ни в спецификации JSF не говорится о возможности преобразования в цепочку.

Лучше всего решить эту проблему на уровне реализации. Если вы хотите расширить существующий конвертер, вам следует просто сделать это и затем вызывать super методы, когда это необходимо. Э.Г.

public class SomeExtendedConverter extends SomeBasicConverter {

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        Object basicConvertedValue = super.getAsObject(context, component, value);

        // ... manipulate more ...

        return extendedConvertedValue;
    }

    // ...
}
...