带有转换器的 Primefaces 日历在 ajax "valueChange" 事件后无法正确更新

Primefaces Calendar with Converter doesn't update correctly upon ajax "valueChange" event

我希望我的 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>

我怎样才能让它协同工作?

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

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

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