<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>
Ceci est mon premier passage avec JSF2.0 et primefaces 3.4.1 et le <p:ajax update
donne une erreur
javax.faces.FacesException: Cannot find component with identifier
":myForm:output" referenced from "myForm:ss"
Essayez d'inspecter le code HTML généré et de voir l'ID réel généré pour votre panelGrid et mettez à jour cet ID. S'il s'avère être dynamique, vous pouvez toujours utiliser les sélecteurs CSS JQuery (je me retrouve à le faire assez souvent). Dans votre cas, vous pouvez faire comme ceci:
update="@([id$=output])"
Cette expression représente chaque composant dont l'id se termine par la sortie. Jetez un œil aux documents JQuery pour plus d'informations.
Vous pouvez également utiliser :#{p:component(componentId)}
comme dans
<p:ajax listener="#{providerSelectBean.onRowSelect}"
update=":#{p:component('output')}" event="rowSelect"/>
Citant la réponse de BalusC à Obtenir l'ID du conteneur de nommage parent dans le modèle pour l'attribut de rendu/mise à jour :
p: component est une fonction d'assistance qui analyse la racine de la vue entière pour un composant avec l'ID donné, puis renvoie son ID client.