我想在中选择日期后调用Bean p:calendar。在我的设置中,我有一个@Named @ViewScopedBean,该类ObWithDate是一个@Entity带有日期字段 validFrom的 。
p:calendar
@Named @ViewScoped
ObWithDate
@Entity
<h:form id="fUser"> <p:dataTable id="dt" var="cum" value="#{myBean.listObWithDates}"> <p:column> <p:calendar id="cValidFrom" value="#{cum.validFrom}"> <p:ajax event="dateSelect" listener="#{myBean.update(cum)}" update=":fUser:dt"/> </p:calendar> </p:column> </p:dataTable> </h:form>
好处是,update(ObWithDate myO)每次选择日期时,都会使用正确的对象调用bean方法。不好的是,它myO.validFrom没有正确的值。它总是 落后一步 :
update(ObWithDate myO)
myO.validFrom
这个问题使我发疯,我发现了几个值更新不正确的问题,还有一些关于的问题p:calendar。他们中的大多数建议将属性selectListener="#{calendarBean.handleDateSelect}"与handleDateSelect(DateSelectEvent event)方法一起使用 。但是我想调用我的方法,因为我想传递变量的当前实例。
selectListener="#{calendarBean.handleDateSelect}"
handleDateSelect(DateSelectEvent event)
p:dataTable
update(ObWithDate myO)``myBean.listObWithDates
<p:ajax immediate="true" .../>
这很可能是生命周期问题。 在 您的侦听器执行 之前, 将调用该字段的setter 。您不应该使用侦听器来设置您的值。
侦听器上的el表达式是 在前一个 请求的渲染响应阶段进行求cum值的,因此其值保持“落后一步”。
cum
您应该从日历日期值的设置器中更新自定义对象。