2012-11-21 5 views
24
<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>  

Dies ist mein erster Stint mit JSF2.0 und primefaces 3.4.1 und die <p:ajax update gibt einen FehlerPrimefaces - Kann nicht Komponente mit der Kennung finden außerhalb der Datentabelle

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

Sie verwenden die Variable 'provider' außerhalb der Datentabelle, wo sie nicht mehr verfügbar ist. – jmrodrigg

+0

'' ist nicht notwendig mit '' – kolossus

Antwort

26

Versuchen Sie, den erzeugten HTML-Code zu inspizieren und sehen Sie die tatsächliche ID, die für Ihr panelGrid generiert wird, und aktualisieren Sie diese ID. Wenn es dynamisch ist, können Sie immer die JQuery-CSS-Selektoren verwenden (das finde ich ziemlich oft). In Ihrem Fall können Sie so gehen:

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

Dieser Ausdruck steht für jede Komponente, deren ID mit Ausgabe endet. Sehen Sie sich die JQuery-Dokumentation an, um weitere Informationen zu erhalten.

+0

Ich habe diesen Trick in item.setUpdate, vielen Dank! –

+0

Ich hatte ein ähnliches Problem, und diese Lösung hat perfekt funktioniert. Ich hatte nicht so viel Glück mit dem anderen, mit p: component. –

+0

Ich hatte ein ähnliches Problem und das funktionierte wie ein Zauber. Allerdings denke ich, dass dies mit Primefaces veraltet ist ... – Sammy

24

Sie können auch :#{p:component(componentId)} verwenden, wie in

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

Zitiert BalusC Antwort auf Get id of parent naming container in template for in render/update attribute:

p: Komponente ist eine Hilfsfunktion, die die gesamte Ansicht Wurzel für eine Komponente scannt mit der angegebenen ID und gibt dann seine Client-ID zurück.

Verwandte Themen