我想在p:calendar
中選擇日期後調用bean。在我的設置中,我有一個@Named @ViewScoped
Bean,類0123¾是一個@Entity
與日期字段validFrom。Primefaces p:日曆p:ajax值未更新(一步延遲)
<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>
的好處是,bean方法update(ObWithDate myO)
每次我選擇日期調用正確的對象。壞消息是myO.validFrom
沒有正確的值。它總是一個落後一步:
- 場與2012-01-01
- GUI變化2012-01-05初始化,bean方法調試到2012-01-01
- GUI更改爲2012 -01-15,bean方法調試到2012-01-05
這個問題我逼瘋了,我發現有不正確更新值幾個問題,也有一些關於p:calendar
。他們大多數建議使用屬性selectListener="#{calendarBean.handleDateSelect}"
與handleDateSelect(DateSelectEvent event)
方法。但是我想調用我的方法,因爲我想傳遞變量的當前實例。
- Firebug的驗證,正確更新值在POST請求
- 我使用Primefaces 3.2和JBoss-7.1.1-最終
- 即使沒有
p:dataTable
,只使用p:calendar
問題發送仍然是一樣的。 - 錯誤對於方法對象
update(ObWithDate myO)
以及myBean.listObWithDates
中的對應條目,可以觀察到調試輸出的值。 <p:ajax immediate="true" .../>
不能解決此問題。
更新 MattHandy幫了我很多,所產生的問題如何獲得在豆類方法中的Ajax調用相應的列表項?制定在後續JSF p:calendar in p:dataTable: How to get the row of p:ajax dateSelect event。
請注意'@ Named'和'@ ViewScoped'不能一起工作。 CDI不知道視圖範圍。也許這不是你具體問題的原因,但現在或以後可能會引起不希望的行爲。 – 2012-04-16 13:52:20
@MattHandy:我使用Seam來增強這個範圍的CDI(http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/scopes.html#viewscoped),這個像幾頁上的魅力一樣工作。這是落後的一步,而不是落後一天。我更新了這個問題來澄清這一點。 – Thor 2012-04-16 14:08:07
這必須是生命週期問題。該方法設置器在偵聽器執行時調用_before_。監聽器將該值設置回以前的值。 – 2012-04-16 15:35:17