如何找到ajax update / render组件的客户端ID?找不到带有“bar”引用的表达式

如何找到ajax update / render组件的客户端ID?找不到带有“bar”引用的表达式

下面的代码是从PrimeFaces的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”的组件,引用自“tabs:insTable:select”。

当我尝试相同的使用时<f:ajax>,它失败了,基本上告诉相同的不同消息:

<f:ajax> 包含一个未知的id“insTable:display”无法在组件“tabs:insTable:select”的上下文中找到它

这是怎么造成的,我该如何解决?


吃鸡游戏
浏览 579回答 4
4回答

RISEBY

这是因为选项卡是一个命名容器以及...你的更新应该是update="Search:insTable:display"你可以做什么,只是将你的对话框放在表单之外,仍然在选项卡内,然后它将是:update="Search:display"
打开App,查看更多内容
随时随地看视频慕课网APP