Следующий код вдохновлен учебными материалами PrimeMaces DataGrid + DataTable и помещен в <p:tab>
<p:tabView>
, находящийся в <p:layoutUnit>
<p:layout>
. Вот внутренняя часть кода (начиная с p:tab
компонента); внешняя часть тривиальна.
<p:tabView id="tabs">
<p:tab id="search" title="Search">
<h:form id="insTable">
<p:dataTable id="table" var="lndInstrument" value="#{instrumentBean.instruments}">
<p:column>
<p:commandLink id="select" update="insTable:display" oncomplete="dlg.show()">
<f:setPropertyActionListener value="#{lndInstrument}"
target="#{instrumentBean.selectedInstrument}" />
<h:outputText value="#{lndInstrument.name}" />
</p:commandLink>
</p:column>
</p:dataTable>
<p:dialog id="dlg" modal="true" widgetVar="dlg">
<h:panelGrid id="display">
<h:outputText value="Name:" />
<h:outputText value="#{instrumentBean.selectedInstrument.name}" />
</h:panelGrid>
</p:dialog>
</h:form>
</p:tab>
</p:tabView>
Когда я нажимаю кнопку <p:commandLink>
, код перестает работать и выдает сообщение:
Невозможно найти компонент с выражением "insTable: display", на который ссылаются "вкладки: insTable: select".
Когда я пытаюсь использовать то же самое с помощью <f:ajax>
, он терпит неудачу с другим сообщением, в основном говорящим то же самое:
<f:ajax>
содержит неизвестный идентификатор "insTable: display" не может найти его в контексте вкладки компонента: insTable: select "
Как это вызвано и как я могу его решить?