我想在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
答案 0 :(得分:1)
未触发ajax更新,因为您没有指定应触发更新的任何事件。
如果您未指定任何事件,则默认事件类型&#34;更改&#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。