Свойство конвертера JSF

Я пытаюсь зарегистрировать разные экземпляры преобразователя в Faces-config, используя стандартный класс преобразователя, которому передаются разные параметры.

В приведенном ниже коде регистрируются два преобразователя DateTimeConverters: первый для дат, включая время, а второй — только для времени. Но свойство шаблона никогда не устанавливается. Можно ли это сделать?

<converter>
    <converter-id>dateTimeConverter</converter-id>
    <converter-class>javax.faces.convert.DateTimeConverter</converter-class>
    <property>
        <property-name>pattern</property-name>
        <suggested-value>yyyy-MM-dd HH:mm:ss</suggested-value>
    </property>
</converter>

<converter>
    <converter-id>timeConverter</converter-id>
    <converter-class>javax.faces.convert.DateTimeConverter</converter-class>
    <property>
        <property-name>pattern</property-name>
        <suggested-value>HH:mm:ss</suggested-value>
    </property>
</converter>

person Community    schedule 18.01.2010    source источник
comment
Действительно нет. Отредактируйте свой вопрос, снимите флажок «Вики сообщества» и сохраните. Вики сообщества предназначена для использования только для субъективных вопросов/обсуждений. Ваш вопрос далеко не субъективен. Это просто технический вопрос/проблема.   -  person BalusC    schedule 18.01.2010
comment
Правда, не знал, что это такое. Но на странице редактирования нет флажка, чтобы отключить его :(   -  person Jurgen Hannaert    schedule 18.01.2010
comment
После проверки вики сообщества нельзя снять отметку.   -  person Bill the Lizard    schedule 18.01.2010


Ответы (1)


К сожалению, через faces-config.xml это невозможно. Объявление <property>, которое вы пытаетесь использовать, не используется во время выполнения.

Если все, что вам нужно, — это управлять шаблоном в одном месте, то лучше всего создать собственный преобразователь. Для этой конкретной цели это не так сложно. Просто расширьте DateTimeConverter и задайте шаблон во время построения. Вот простой пример:

public MyDateTimeConverter extends DateTimeConverter() {
    public MyDateTimeConverter() {
        setPattern("yyyy-MM-dd HH:mm:ss");
    }
}

Конечно, вы можете получить шаблон откуда-то еще, например. файл свойств или XML-файл в пути к классам.

Зарегистрируйте этот преобразователь следующим образом:

<converter>
    <converter-for-class>java.util.Date</converter-for-class>
    <converter-class>com.example.MyDateTimeConverter</converter-class>
</converter>

Это должно быть так. Нет необходимости в f:converter или UIOutput#setConverterId().

person Community    schedule 18.01.2010
comment
Спасибо за ваше объяснение. Но какая польза от этих свойств вfaces-config.xml? (тег свойства является частью xsd). - person Jurgen Hannaert; 19.01.2010
comment
@JurgenHannaert, посмотрите на xsd, там написано: < i>элементы атрибутов и свойств предназначены для того, чтобы позволить разработчикам компонентов более полно описывать свои компоненты для инструментов и пользователей. Эти элементы не имеют обязательной семантики времени выполнения. - person Vsevolod Golovanov; 21.06.2013
comment
Действительно, такие как например [ctrl+space] автодополнение всплывающих подсказок/описаний. - person BalusC; 21.06.2013