jsf конвертер p: календарная дата - PullRequest
1 голос
/ 27 января 2012

К какому типу класса Java должен быть привязан компонент "p: calendar"?(для реализации конвертера для него).

Я думал, что это java.util.Date, и поэтому у меня есть следующее:

<p:calendar id="fecha" value="#{catalogoController.criterios.fecha}"
            maxlength="10"
            size="10"
            locale="es"
            pattern="dd/MM/yyyy"
            navigator="true"
            showOn="button"
            showButtonPanel="true" />

И свойство catalogoController.criterios.fecha является java.util.Date.

Мой пользовательский конвертер:

    @FacesConverter(forClass = java.util.Date.class)
    public class FechaDateConverter implements Converter {
    ...
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            log.info("getAsObject");
            ...
        }
    ...
    }

Я не привожу здесь код метода, потому что он большой.Он проверяет условия и создает исключение ConverterException с пользовательскими сообщениями Faces, которые я получаю из файла пользовательских свойств ("msjsConversion").

Но это не работает.Когда я ввожу неправильную дату (например, «01/032011»), мой метод getAsObject не запускается (я знаю, потому что его первая строка журнала никогда не достигается).И сообщение о преобразовании по умолчанию показывается как FaceSMessage, а не то, которое я получаю из моего пакета "msjsConversion".

Я думаю, что причина, по которой оно не вызывается, заключается в том, что класс Java, к которому p:calendarявляется не java.util.Date (это класс, для которого я объявил свой конвертер).

Итак, я проверил это, если объявил конвертер с идентификатором:

@FacesConverter("fechaDateConverter")
public class FechaDateConverter implements Converter {

и я поместил это в p:calendar компонент:

<f:converter converterId="fechaDateConverter" />

Это работает.

Так кто-нибудь знает, какой класс Java p:calendar?Чтобы я мог объявить свой конвертер для этого класса и не использовать converterId?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Итак, кто-нибудь знает, что такое класс Java p: calendar?

Может показаться, что его нет.

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

Преобразование из строки в дату выполняется с помощью метода getConvertedValue org.primefaces.component.calendar.CalendarRenderer

Если был указан конвертер (в вашем p: календаре на вашей странице), он будет использоваться для преобразования даты и обработки любых ошибок, с которыми он может столкнуться. Если конвертер не указан, то метод пытается проанализировать дату, используя предоставленный шаблон (или, если шаблон не указан, он будет использовать значение по умолчанию MM / dd / yyyy).

0 голосов
/ 03 октября 2012

Вы можете использовать атрибут converter из p: calendar, чтобы указать конвертер, либо по id (например, converter = 'fechaDateConverter'), либо по имени компонента (например, converter = '# {fechaDateConverter}') .

Это имеет тот недостаток, что вам нужно повторить, если для каждого p: calendar ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...