我正在尝试在单击数据表中的按钮时打开对话框。该对话框包含另一个数据表,其中包含与按钮所属行相关的详细信息。 侦听器设置详细数据表所需的变量。 使用以下代码段似乎在actionListener被触发之前执行更新(以及详细数据表使用的列表的创建),因此对话框中的dataTable始终为空。 为什么?这是通缉行为吗?还有另一种方法可以解决我的问题吗?
我使用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()之前调用,该方法正确设置了遗憾的未使用的值。
我正在使用Glassfish和primefaces 2.1.1。
答案 0 :(得分:0)
在我看来,您正在尝试处理当前按钮以及对话框内容本身。因为这意味着它需要重建组件树,当然将为详细信息对话框调用getter。
因此,您只需处理按钮,并仅重新呈现详细信息表:
<p:commandButton image="ui-icon ui-icon-search"
style="width:1.8em;height:1.8em"
onsuccess="tDialog.show()"
title="#{msgs.dettaglio}"
process="@this"
update="timbrature_dt"
immediate="true"
actionListener="#{dispCongediMBean.timbratureDettAction(dett)}">