我試圖打開一個對話框,當點擊一個數據表中的按鈕。該對話框包含另一個數據表,其中包含與該按鈕所屬行相關的詳細信息。 偵聽器設置詳細數據表所需的變量。 使用下面的代碼片段看起來更新(以及創建詳細數據表使用的列表)在actionListener被觸發之前執行,因此對話框中的dataTable始終爲空。 爲什麼?那是想要的行爲嗎?有其他方法可以解決我的問題嗎?爲什麼在使用p:commandButton的ajax進程之後調用actionListener?
我用action而不是actionListener獲得了相同的結果。
這是第一個數據表中的元素按鈕:
<p:column style="width:16px;padding-left:4px;padding-right:4px;">
<f:facet name="header">
</f:facet>
<p:commandButton image="ui-icon ui-icon-search"
style="width:1.8em;height:1.8em"
onsuccess="tDialog.show()"
title="#{msgs.dettaglio}"
process="@this, timbrature_dt"
update="timbrature_dt"
immediate="true"
actionListener="#{dispCongediMBean.timbratureDettAction(dett)}">
</p:commandButton>
</p:column>
下面是對話:
<p:dialog header="#{msgs.timbrature}" widgetVar="tDialog" resizable="false">
<p:dataTable id="timbrature_dt"
value="#{dispCongediMBean.timbratureDataList}"
var="tdett">
<p:column>
<f:facet name="header">
#{msgs.data}
</f:facet>
<h:outputText value="#{tdett.sDtComp}"/>
</p:column>
....
這裏被調用的順序:
INFO: getTimbratureDataList
INFO: Nessuna timbratura.
INFO: getTimbratureDataList
INFO: Nessuna timbratura.
INFO: getTimbratureDataList
INFO: Nessuna timbratura.
INFO: getDettaglioDataList list dettaglio: 4
INFO: timbratureDettAction
INFO: gius corrente 315
你可以看到,方法getTimbratureDataList()在actionListener的timbratureDettAction()之前調用,它正確地設置了t他認爲不幸的是沒有使用。
我使用的是Glassfish和primefaces 2.1.1。
謝謝,但它不工作。在這種情況下,getTimbratureDataList在按鈕點擊後不會被調用。 – maxqua72
我發現解決這個問題的唯一方法是在命令按鈕完成時觸發另一個Ajax請求(這是一個骯髒的解決方案):'oncomplete =「PrimeFaces.ajax.AjaxRequest('/ econsob/faces/protected/disp_congedi_permessi_dettaglio .xhtml',{source:'dettaglio_dt:0:butt',process:'timbrature_dt',update:'timbrature_dt',oncomplete:function(xhr,status,args){tDialog.show();}});「' – maxqua72