Я пытаюсь открыть диалоговое окно, когда нажимается кнопка внутри таблицы данных. Диалог содержит другую таблицу данных с деталями, относящимися к строке, к которой принадлежит кнопка.
Слушатель устанавливает переменную, которая требуется для таблицы подробных данных.
Используя следующий фрагмент, кажется, что обновление (и, следовательно, создание списка, используемого таблицей подробных данных) выполняется до запуска 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 и основные лица 2.1.1.