Подтвердить что ты не робот

Поверхности - Не удается найти компонент с идентификатором за пределами datatable

 <ui:define name="content">
    <f:view>                        
    <h:form id="myForm" styleClass="form" >

        <p:dataTable var="provider" id="ss"  value="#{providerSelectBean.providerList}" rowKey="#{provider.license}"  

            selection="#{providerSelectBean.selectedProvider}" selectionMode="single"> 

            <p:ajax listener="#{providerSelectBean.onRowSelect}"    
                            update=":myForm:output"event="rowSelect"/>  

            <p:column sortBy="#{provider.license}" width="110" >
                <f:facet name="header">
                    <h:outputText value="License#" />
                </f:facet>
                <h:outputText value="#{provider.license}" />
            </p:column>

            <p:column sortBy="#{provider.prgName}" width="110" >
                <f:facet name="header">
                    <h:outputText value="Program Name" />
                </f:facet>
                <h:outputText value="#{provider.prgName}" />
            </p:column>

        </p:dataTable><br/>

        <p:panelGrid id="output" >
            <h:outputText value="License" />
            <h:outputText value="#{provider.license}" /> 
        </p:panelGrid>

    </h:form>           
    </f:view>

</ui:define>    

Это мое первое задание с JSF2.0 и первичными 3.4.1, а <p:ajax update дает ошибку

javax.faces.FacesException: Cannot find component with identifier  
":myForm:output"  referenced from "myForm:ss"
4b9b3361

Ответ 1

Попробуйте проверить сгенерированный HTML-код и увидеть фактический идентификатор, сгенерированный для панели PanelGrid, и обновить этот идентификатор. Если это динамическое поведение, вы всегда можете использовать селектор JQuery CSS (я часто это делаю). В вашем случае вы можете сделать следующее:

update="@([id$=output])"

Это выражение обозначает каждый компонент, id которого заканчивается выходом. Взгляните на документы JQuery для получения дополнительной информации.

Ответ 2

Вы также можете использовать :#{p:component(componentId)}, как в

<p:ajax listener="#{providerSelectBean.onRowSelect}"  
update=":#{p:component('output')}" event="rowSelect"/>

Цитирование ответа BalusC на Получить идентификатор родительского контейнера имен в шаблоне для атрибута render/update:

p: component - вспомогательная функция, которая сканирует весь корень представления для компонента с данным идентификатором, а затем возвращает свой идентификатор клиента.