【问题标题】:Primefaces Calendar with Converter doesn't update correctly upon ajax "valueChange" event带有转换器的 Primefaces 日历在 ajax“valueChange”事件时无法正确更新
【发布时间】:2017-03-31 22:28:01
【问题描述】:

我希望我的p:calendar 能够通过单击日历弹出窗口中的日期以及直接在文本输入字段中编辑日期来工作。

这很好用:

        <p:calendar value="#{myBackingBean.date}">
            <p:ajax event="valueChange" listener="#{myBackingBean.updateDate()}" />
            <p:ajax event="dateSelect" listener="#{myBackingBean.selectDate()}" />
        </p:calendar>

但是,一旦我添加了转换器(见下文),即使新日期已转换,也不再为“valueChange”事件(在文本字段中通过键盘编辑日期时)设置新日期正确,但是在支持 bean 中设置的日期是旧值,而不是我在文本字段中编辑的新值:

        <p:calendar value="#{myBackingBean.date}">
            <f:converter converterId="myLocalDateConverter"/>
            <p:ajax event="valueChange" listener="#{myBackingBean.updateDate()}" />
            <p:ajax event="dateSelect" listener="#{myBackingBean.selectDate()}" />
        </p:calendar>

我怎样才能让它一起工作?

【问题讨论】:

  • 在 primefaces 中,日历具有转换器属性。使用此属性传递转换器 ID。

标签: ajax jsf primefaces calendar converter


【解决方案1】:

参考这个。 https://www.javacodegeeks.com/2015/06/utilizing-the-java-8-date-time-api-with-jsf-and-java-ee-7.html

它使用日历的转换器属性来实现自定义转换器。此示例专门针对 Java 8 Date API。您可以相应地编写代码。

【讨论】:

  • 听起来是个好主意,但遗憾的是,如果我使用converter 属性或&lt;f:converter/&gt; 元素,效果是一样的。
【解决方案2】:

我找到了问题的原因:转换器从输入字段接收到无法正确转换的文本。显然,这会导致标准 JSF 生命周期的中断,并设置旧值而不是新值。使用正确格式化的输入,整个事情都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2019-06-09
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多