以下代码的灵感来自 PrimeFaces DataGrid + DataTable 教程,并将其放入位于 <p:layout>
的 <p:layoutUnit>
中的 <p:tabView>
的 <p:tab>
中。下面是代码的内部部分(从 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>
时,代码停止工作并给出 信息:
无法找到从“ tab: insTable: select”引用表达式“ insTable: display”的组件。
当我使用 <f:ajax>
尝试同样的方法时,它失败了,而不同的 信息基本上告诉我相同的信息:
<f:ajax>
包含一个未知的 id“ insTable: display”无法在组件“ tab: insTable: select”的上下文中找到它
当它发生在另一个 Ajax 回发期间,并且 JSF 项目阶段被设置为 Development
时,它就会失败,并出现一个带有 信息的 JavaScript 警报:
MalformedXML: 在 update: insTable 期间: display not found
这是怎么引起的,我该怎么解决?