【问题标题】:LocalDate (only) with primefaces calendarLocalDate(仅限)与 primefaces 日历
【发布时间】:2023-04-05 14:51:01
【问题描述】:

我想在 Bean 中显示一个带有关联 LocalDateprimefaces calendar 元素。

我以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 也不起作用。

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

JSF 2.2/Java8/Primefaces 6

【问题讨论】:

    标签: jsf primefaces localdate


    【解决方案1】:

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

    如果不指定任何事件,将使用默认事件类型“change”。

    • p:calendar 触发“更改”事件,当您在 inputText 和模糊
    • p:calendar 触发“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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢回复 - 奇怪的是转换器根本没有触发,没有调用getAsObject (/getAsString)。我的转换器会工作 - 如果它会被调用。
      猜你喜欢
      • 2020-05-15
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多