LocalDate (только) с календарем простых лиц - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу отобразить элемент primefaces calendar со связанным LocalDate в Бине.

Я использовал Как использовать java.time.ZonedDateTime / LocalDateTime в p: calendar в качестве примера. Пример работает нормально, НО мне не нужна часть времени и, что более важно, я не хочу, чтобы часть времени календаря отображалась.

Проблема в том, что когда я изменяю pattern и удаляю часть времени:

<p:calendar id="localDate"
        pattern="dd-MMM-yyyy"
        value="#{bean.periodFrom}">
    <f:converter converterId="localDateConverter" />
    <p:ajax update="display" />
</p:calendar>

конвертер больше не вызывается / не используется вообще. Что меня немного удивляет.

Удаление pattern также не работает.

Есть ли альтернативный способ использовать пример без временной части? И почему конвертер больше не вызывается, когда я "упрощаю" шаблон?

JSF 2.2 / Java8 / Primefaces 6

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Обновление ajax не запускается, поскольку вы не указали ни одного события, для которого должно запускаться обновление.

Если вы не укажете какое-либо событие, тип события по умолчанию «change» будетused.

  • p: календарь запускает событие «изменения», когда вы вводите дату в inputText, и размытие
  • p: календарь запускает событие «dateSelect», когда вы выбираетедата во всплывающем календаре

В вашем случае вы должны вставить несколько прослушивателей событий:

<p:ajax update="display" />
<p:ajax event="dateSelect" update="display" />

Таким образом, ваш код приведет к:

<p:calendar id="localDate"
        pattern="dd-MMM-yyyy"
        value="#{bean.periodFrom}">
    <f:converter converterId="localDateConverter" />
    <p:ajax update="display" />
    <p:ajax event="dateSelect" update="display" />
</p:calendar>

(Кстати: невозможно объединить несколько событий в одном компоненте p: ajax, как вы можете прочитать здесь https://stackoverflow.com/a/38319944/1643015)

0 голосов
/ 25 апреля 2018

Если вы использовали ZonedDateTimeConverter, он вообще не мог работать, потому что LocalDate не является экземпляром ZonedDateTime.Вот почему конвертер сгенерирует исключение ConverterException (потому что проверка экземпляра не удалась).Вы увидите это, если вставите ap: message для вашего p: calendar.Используемый шаблон "dd-MMM-yyyy" также не работает для ZonedDateTimeConverter, поскольку этот шаблон не предоставляет ни времени, ни часового пояса.Вот почему преобразование вызывает исключение DateTimeParseException, а преобразователь также создает исключение ConverterException.Поэтому, если вы хотите работать с LocalDate, вам нужно реализовать свой собственный конвертер, чем можно справиться с этим классом, что очень просто.Просто возьмите ZonedDateTimeConverter и замените ZonedDateTime на LocalDate.

...