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

To mój pierwszy przejazd z JSF2.0 i primefaces 3.4.1 i <p:ajax update daje błądPrimefaces - Nie można znaleźć składnika z identyfikatorem poza DataTable

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

Używasz zmiennej 'provider' poza datatable, gdzie nie jest już dostępna. – jmrodrigg

+0

'' nie jest konieczne z '' – kolossus

Odpowiedz

26

Spróbuj wglądu wygenerowany kod HTML i zobacz, jaki faktyczny id jest generowany dla twojego paneluGrid i zaktualizuj ten identyfikator. Jeśli jest dynamiczny, zawsze możesz użyć selektorów CSS JQuery (robię to dość często). W twoim przypadku możesz pójść w ten sposób:

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

To wyrażenie oznacza każdy komponent, którego id kończy się wynikiem. Zapoznaj się z dokumentami JQuery, aby uzyskać więcej informacji.

+0

Użyłem tej sztuczki w item.setUpdate, wielkie dzięki! –

+0

Miałem podobny problem, a to rozwiązanie działało idealnie. Nie miałem tyle szczęścia z drugim, używając p: component. –

+0

Miałem podobny problem, który działał jak czar. Jednak wydaje mi się, że jest to przestarzałe z podstawowymi cechami ... – Sammy

24

Można również użyć :#{p:component(componentId)} jak w

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

Cytując odpowiedź BalusC do Get id of parent naming container in template for in render/update attribute:

p: składnik jest funkcja pomocnika, który skanuje cały korzeń widok dla składnika o danym ID a następnie zwraca jego identyfikator klienta.

Powiązane problemy