LocalDate(仅限)具有primefaces日历

时间:2018-04-24 17:31:32

标签: jsf primefaces localdate

我想在Bean中显示一个primefaces calendar元素和一个关联的LocalDate

我以How to use java.time.ZonedDateTime / LocalDateTime in 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也不起作用。

是否有其他方法可以在没有时间部分的情况下使用该示例?当我&#34;简化&#34;为什么转换器不再被调用?模式?

JSF 2.2 / Java8 / Primefaces 6

2 个答案:

答案 0 :(得分:1)

未触发ajax更新,因为您没有指定应触发更新的任何事件。

如果您未指定任何事件,则默认事件类型&#34;更改&#34;将被使用。

  • p:日历触发&#34;更改&#34;事件,当您在中输入日期时 inputText and blur
  • p:calendar触发&#34; dateSelect&#34;事件,当您选择日期时 日历弹出

在您的情况下,您应该插入多个事件侦听器:

<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

答案 1 :(得分:0)

如果您使用ZonedDateTimeConverter它根本无法工作,因为LocalDate不是 ZonedDateTime。这就是转换器抛出ConverterException的原因(因为instanceof检查失败)。如果您为p:calendar插入p:消息,您会看到。 使用的模式“dd-MMM-yyyy”也不适用于ZonedDateTimeConverter,因为这种模式既不 提供时间或时区。这就是为什么转换抛出DateTimeParseException并且转换器抛出一个 ConverterException也是。 因此,如果您想使用LocalDate,您必须实现自己的转换器,而不是处理该类,这非常容易。只需使用ZonedDateTimeConverter并将ZonedDateTime替换为LocalDate。