2012-09-17 2 views
0

J'ai ce code:datatable pas mis à jour après l'action contextmenu

  <p:contextMenu for="customersTable"> 
      <p:menuitem value="Delete" update="customersTable" icon="ui-icon-close" actionListener="#{customerbean.onDeleteCustomer}"/> 
      </p:contextMenu> 


      <p:dataTable id="customersTable" var="customer" widgetVar="customerTable" value="#{customerbean.customerList}" paginator="true" rows="20" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,20,50,100" emptyMessage="#{text['table.customer.filter.notfound']}" filteredValue="#{customerbean.filteredCustomers}" editable="true" draggableColumns="true" rowKey="#{customer.id}" selection="#{customerbean.selectedCustomer}" selectionMode="single"> 

Mon problème est que lorsque je clique sur « Supprimer » dans le contextMenu, tout fonctionne bien dans le sens que l'enregistrement/ligne est effacé du backend par l'invocation de la méthode bean mais la table n'est pas mise à jour reflétant les nouvelles données.

+0

vous devez donner l'id complet du composant pour la datatable pour l'attribut de mise à jour comme update = "formid: datatableid" – PermGenError

Répondre

1

Vous devez fournir l'identifiant complet du composant dataTable lors de la mise à jour.

<h:form id="frm"> 
    <p:contextMenu for="customersTable"> 
     <p:menuitem value="Delete" update="frm:customersTable" icon="ui-icon-close" actionListener="#{customerbean.onDeleteCustomer}"/> 
     </p:contextMenu> 
     <p:dataTable id="customersTable" var="customer" widgetVar="customerTable"   value="#{customerbean.customerList}" paginator="true" rows="20" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="10,20,50,100" emptyMessage="#{text['table.customer.filter.notfound']}" filteredValue="#{customerbean.filteredCustomers}" editable="true" draggableColumns="true" rowKey="#{customer.id}" selection="#{customerbean.selectedCustomer}" selectionMode="single"> 



</h:form> 
+0

J'ai défini le paramètre prependId sur false. Lorsque j'entre l'identifiant complet, j'obtiens cette exception: javax.servlet.ServletException: Impossible de trouver le composant avec l'identifiant ba – javaMS

+0

pouvez-vous poster l'exception s'il vous plaît – PermGenError

+0

Je ne peux pas poster tout cela mais c'est comme je l'ai écrit dans le post précédent: SEVERE : Error Rendering View [/viewCustomerList.xhtml] javax.faces.FacesException: Impossible de trouver le composant avec l'identificateur "ba : customersTable" référencé à partir de "j_idt34". à org.primefaces.util.ComponentUtils.findClientIds (ComponentUtils.java 273) à org.primefaces.util.AjaxRequestBuilder.addIds (AjaxRequestBuilder.jav : 102) à org.primefaces.util.AjaxRequestBuilder.update (AjaxRequestBuilder .jav : 90) – javaMS

0

Ok, j'ai trouvé quel était le problème - assez trivial. Je le supprimais de la base de données mais pas de la Collection que Primefaces utilise pour le rendre à l'écran. Il doit être supprimé des deux.

+0

mais pourquoi avez-vous obtenu SEVERE: Erreur Rendering View [/viewCustomerList.xhtml] javax.faces.FacesException: Impossible de trouver le composant avec l'identifiant "ba: customersTable" référencé à partir de "j_idt34". à ?? – PermGenError

+0

Je l'ai eu seulement en suivant votre réponse, c'est-à-dire que je dois ajouter le nom du formulaire. – javaMS

Questions connexes