带有转换器的 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 生命周期中断,并且会设置旧值而不是新值。通过正确格式化的输入,整个事情都按预期工作。
我希望我的 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 生命周期中断,并且会设置旧值而不是新值。通过正确格式化的输入,整个事情都按预期工作。