我希望我的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>
我怎样才能让它一起工作?
答案 0 :(得分:1)
参考这个。 https://www.javacodegeeks.com/2015/06/utilizing-the-java-8-date-time-api-with-jsf-and-java-ee-7.html
它使用Calendar的converter属性来实现自定义转换器。此示例专门用于Java 8 Date API。您可以相应地编写代码。
答案 1 :(得分:0)
我找到问题的原因:转换器从输入字段接收文本,它无法正确转换。显然,这会导致标准JSF生命周期中断,并且设置旧值而不是新值。通过格式正确的输入,整个过程可以按预期工作。