如何找出ajax更新/渲染組件的客戶端ID? 找不到帶有“bar”引用的表達式“foo”的組件



Answers

首先:據我所知在tabview中放置對話是一種不好的做法......你最好把它拿出來......

現在回答你的問題:

對不起,花了我一些時間來得到你想要實現的東西,

我剛剛在自己的網絡應用程序中完成了工作

正如我之前所說的將p:對話框放在`p:tabView,

按照最初的建議離開p:對話框:

<p:dialog modal="true" widgetVar="dlg">
    <h:panelGrid id="display">
        <h:outputText value="Name:" />
        <h:outputText value="#{instrumentBean.selectedInstrument.name}" />
    </h:panelGrid>
</p:dialog>   

和p:commandlink應該看起來像這樣(我所做的就是更改更新屬性)

<p:commandLink update="display" oncomplete="dlg.show()">
    <f:setPropertyActionListener value="#{lndInstrument}" 
        target="#{instrumentBean.selectedInstrument}" />
    <h:outputText value="#{lndInstrument.name}" />
</p:commandLink>  

在我的web應用程序中也是如此,如果它不適合你,那麼我猜你的java bean代碼有問題。

Question

下面的代碼受PrimeFaces DataGrid + DataTable教程的啟發,並放置在駐留在<p:layoutUnit><p:tabView>中的<p:layoutUnit><p:layoutUnit>中。 這裡是代碼的內部部分(從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> ,代碼停止工作並給出消息:

從“tabs:insTable:select”引用的表達式“insTable:display”找不到組件。

當我使用<f:ajax>進行相同的嘗試時,它會失敗,並顯示一條基本上不同的消息:

<f:ajax>包含未知ID“insTable:display”無法在組件的上下文中找到它“選項卡:insTable:select”

這是如何造成的,我該如何解決這個問題?




嘗試update="insTable:display" update="display" 。 我相信你不能用這樣的ID作為ID前綴。




Related