2012-11-21 11 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>  

Questo è il mio primo stint con JSF2.0 e primefaces 3.4.1 e la <p:ajax update dà un erroreprimefaces - Non riesci a trovare componente con identificatore di fuori DataTable

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

Si sta utilizzando la variabile 'provider' al di fuori del datatable, dove non è più disponibile. – jmrodrigg

+0

'' non è necessario con '' – kolossus

risposta

26

Provare per ispezionare il codice HTML generato e vedere l'ID effettivo generato per il tuo panelGrid e aggiornare quell'id. Se è dinamico, puoi sempre usare i selettori CSS di JQuery (mi trovo a farlo abbastanza spesso). Nel tuo caso, si può andare in questo modo:

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

Questa espressione sta per ogni componente il cui id finisce con l'uscita. Dai un'occhiata ai documenti JQuery per maggiori informazioni.

+0

Ho usato questo trucco in item.setUpdate, molte grazie! –

+0

Ho avuto un problema simile e questa soluzione ha funzionato perfettamente. Non ero così fortunato con l'altro, usando p: componente. –

+0

Ho avuto un problema simile e questo ha funzionato come un fascino. Tuttavia, penso che questo sta diventando deprecato con primefaces ... – Sammy

24

È inoltre possibile utilizzare :#{p:component(componentId)} come in

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

Citando la risposta di BalusC a Get id of parent naming container in template for in render/update attribute:

p: componente è una funzione di supporto che analizza l'intera radice vista per un componente con il dato ID e quindi restituisce il suo ID cliente.

Problemi correlati