IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Rafraichissement d'une dataTable suite à une suppression d'un enregistrement


Sujet :

JSF Java

  1. #1
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut Rafraichissement d'une dataTable suite à une suppression d'un enregistrement
    Bonjour,

    Sous PrimeFaces j'ai crée une dataTable et lorsque je souhaite supprimer un élément de la dataTable elle est supprimé mais ensuite lors d'une deuxième suppression la dataTable n'est pas rafraichit.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public String deleteEntityForm(ActionEvent actionEvent) {
            if (this.getEntityId() == null && (this.getParameter("eid") != null)) {
                setEntityId(new Long(getParameter("eid")));
            }
            if (this.getEntityId() != 0 && (this.getParameter("eid") != null)) {
                try {
                    entityForm = ManagerUtils.getEntityForm(this.getEntity());
                    entityForm.setId(this.getEntityId());
                    entityForm.delete();
                    pivotTable.setDatas(manager.getAll()); // penser à recharger la liste des données
                    return "/list.xhtml?e=" + this.getEntity();
                } catch (Exception ex) {
                    ex.getMessage();
                }
            }
            return "";
        }
    Code jsf : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <!-- dataTable -->
                        <p:dataTable id="listTable" var="data" value="#{listForm.lazyEntities}" rowKey="#{data.id}"
                                     paginator="true" rows="25"  rowsPerPageTemplate="10,25,50" lazy="true">                                              
     
                            <p:columns var="column" value="#{listForm.pivotTable.columns}" filterMatchMode="contains"
                                       columnIndexVar="colIndex" sortBy="#{data[column.property]}" filterBy="#{data[column.property]}" >
                                <f:facet name="header">  
                                    #{text[column.header]}
                                </f:facet>                                                        
     
                                #{listForm.getColumn(column.property)}
                            </p:columns>
     
                            <p:column styleClass="small" exportable="false">
                                <f:facet name="header">
                                    <h:outputText value="#{text['table.action']}" />
                                </f:facet>
     
                                <!-- édition de l'entité -->
                                <h:panelGroup styleClass="buttonBar bottom">                                                                                                 
                                    <h:commandLink id="edit" styleClass="button view" action="#{listForm.editEntityForm}">
                                        <h:graphicImage name="#{text['action.tab.edit']}" />                                    
                                        <f:param name="e" value="#{listForm.entity}"/>
                                        <f:param name="eid" value="#{data.id}"/>                                    
                                        <f:param name="from" value="list"/>
                                    </h:commandLink> 
     
                                    <!-- suppression de l'entité -->
                                    <p:commandLink id="delete" styleClass="button delete" actionListener="#{listForm.deleteEntityForm}" 
                                                   update=":formDynamicTable:listTable" ajax="true" process="@this"
                                                   onstart="bCancel=true; return confirmDelete('#{text[listForm.pivotTable.title]}')">                                    
                                        <h:graphicImage name="#{text['action.tab.delete']}" />                                      
                                        <f:param name="e" value="#{listForm.entity}"/>
                                        <f:param name="eid" value="#{data.id}"/>                                    
                                        <f:param name="from" value="list"/> 
                                    </p:commandLink>                        
                                </h:panelGroup>
                            </p:column>
                        </p:dataTable>
    Merci d'avance.

    Transact.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    La méthode que tu appelles renvoie la page à afficher, tu devrais ajouter au chemin "?faces-redirect=true"
    Si ça ne suffit pas, remplace l'attribut actionListener="" par action=""

    Ceci dit, c'est un peu curieux... tu spécifies un traitement ajax avec un update du composant liste, la méthode appelée ne devrait rien renvoyer.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Voici le chemin de l'url
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return "/list.xhtml?e=" + this.getEntity();
    Comment placer un ?faces-redirect=true dans cette url car dans le fichier JSF j'appelle la méthode deleteEntityForm?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return "/list.xhtml?faces-redirect=true&e=" + this.getEntity();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return "/list.xhtml?e=" + this.getEntity() + "&faces-redirect=true";
    Par contre le faces-redirect à true "intercepte" et "squeze" le message d'avertissement lors de la suppression de la fiche

  6. #6
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Question : Est-ce que ce ne serait pas plutôt du côté client qu'il faudrait faire une "action" pour rafraichir la page?
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:ajax event="xxx" listener="xxx" update="xxx" />

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par transact Voir le message
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return "/list.xhtml?e=" + this.getEntity() + "&faces-redirect=true";
    Par contre le faces-redirect à true "intercepte" et "squeze" le message d'avertissement lors de la suppression de la fiche
    Pour ça, il y a un paramétrage qui permet de les garder, j'ai une méthode dédiée que voici (avec le <p:growl>)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                FacesContext facesContext = FacesContext.getCurrentInstance();
                facesContext.getExternalContext().getFlash().setKeepMessages(true);
                facesContext.addMessage(target, message);
                RequestContext.getCurrentInstance().update(targetMessageComponentId);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Merci OButterlin,

    En me penchant plus profondément sur le problème je me suis rendu compte que ma méthode pour afficher en Lazy-Loading avec PrimeFaces ne re-chargeait pas les données après la suppression.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public LazyTableList getLazyEntities() {
            if (StringUtils.isCorrect(this.getEntity())) {
                Restriction restriction = RestrictionFactory.createFilter();
                manager = ManagerUtils.getEntityManager(this.getEntity());
                if (lazyList == null) {
                    lazyList = new LazyTableList(manager, restriction);
                }
     
                //DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("formDynamicTable:listTable");
                //dataTable.loadLazyData();
                return lazyList;
            }
            return null;
        }

    J'ai mis en commentaire le DataTable car j'avais un message d'erreur StackOverFlow
    Je continue à chercher.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/09/2012, 09h00
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. Réponses: 4
    Dernier message: 30/09/2009, 14h37
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. [ADO.NET][C#] Comment copier une DataRow d'une DataTable à une autre ?
    Par L`artiste dans le forum Accès aux données
    Réponses: 3
    Dernier message: 29/04/2006, 00h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo