Поверхности - Не удается найти компонент с идентификатором за пределами 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"
Ответы
Ответ 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 - вспомогательная функция, которая сканирует весь корень представления для компонента с данным идентификатором, а затем возвращает свой идентификатор клиента.