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 :

Primefaces : Datatable et tri des colonnes


Sujet :

JSF Java

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut Primefaces : Datatable et tri des colonnes
    Bonjour,

    J'utilise le framework Primefaces avec un Datatable dont toutes les colonnes sont triables.
    J'ai un bouton qui me permet de revenir au tri initial, utile après avoir trié sur une colonne ou plusieurs.
    Le problème est que ce bouton ne fait rien : ce sont les colonnes triées qui prennent le dessus !

    Donc ma question est : comment peut-on 'dé-trier' une colonne d'un Datatable de Primefaces ?

    Merci.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Relancer la requête initiale.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    J'ai essayé en relançant la requête mais le tri précédent reste.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas trop pourquoi en relançant la requête initiale tu as un résultat trié, il faudrait montrer ton code pour évaluer...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @PostConstruct
        public void init() {
     
            rechercherListeRefPlanCompteM61();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public void rechercherListeRefPlanCompteM61() {
     
            setListeRefPlanCompteM61(getRefPlanCompteM61Facade().rechercherListeRefPlanCompteM61());

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public List<RefPlanCompteM61> rechercherListeRefPlanCompteM61() {    <-- Sélection des lignes de la bdd
     
            List<RefPlanCompteM61> listeRefPlanCompteM61 = new ArrayList<>();
     
            Query jQuery = getEntityManager().createQuery("select x from RefPlanCompteM61 x order by x.idLigne");
     
            try {
                listeRefPlanCompteM61 = (List<RefPlanCompteM61>) jQuery.getResultList();
            } catch (NoResultException e) {
            }
            return listeRefPlanCompteM61;
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <p:dataTable id="idRefPlanCompteM61" widgetVar="widgetRefPlanCompteM61" var="ligne" class="tableauStyle" tableStyle="table-layout: auto"
                                         value="#{administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61}"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <p:commandLink>
        <h:outputLabel value="Re-trier"/>
        <p:ajax listener="#{administrationPlanCompteM61ManagerBean.retrierTableau()}" update="idRefPlanCompteM61"/>
    </p:commandLink>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public void retrierTableau() {
     
            rechercherListeRefPlanCompteM61();
        }

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    En théorie ça devrait foncitonner...
    Ta balise <p:datatable> est tronquée, tu n'aurais pas mis l'attribut sortBy à ce niveau ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    Le sortBy est défini au niveau des colonnes.
    Voici le Datatable complet :

    Code : 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <p:dataTable id="idRefPlanCompteM61" widgetVar="widgetRefPlanCompteM61" var="ligne" class="tableauStyle" tableStyle="table-layout: auto"
                                         value="#{administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61Filtree}" 
                                         rowKey="#{ligne.idPk}"
                                         selection="#{administrationPlanCompteM61ManagerBean.refPlanCompteM61Selectionne}"
                                         resizableColumns="true"
                                         liveResize="true"
                                         selectionMode="single" 
                                         sortMode="multiple" 
                                         nullSortOrder="-1"
                                         editable="true" 
                                         editMode="cell" 
                                         paginator="true"
                                         paginatorPosition="bottom"
                                         paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
                                         rows="#{accueilManagerBean.tableauLignesReference}"
                                         emptyMessage="Aucun enregistrement trouvé">
                                <p:ajax event="page" onstart="PF('widgetPatienter').block()" oncomplete="PF('widgetPatienter').unblock()"/>
                                <p:ajax event="sort" onstart="PF('widgetPatienter').block()" oncomplete="PF('widgetPatienter').unblock()"/>
                                <f:facet name="header">
                                    <h:outputLabel value="Administration - Plan de compte M61" class="gris"/>
                                </f:facet>
                                <p:columns value="#{administrationPlanCompteM61ManagerBean.listeColonne}" var="colonne" columnIndexVar="iColonne" class="tableauContour" 
                                           headerText="#{colonne}" 
                                           sortBy="#{administrationPlanCompteM61ManagerBean.trierTableau(ligne, colonne)}"> <-------------------------- sortBy
                                    <p:cellEditor>
                                        <f:facet name="output">
                                            <p:outputPanel id="idColonne">
                                                <h:outputText id="idValeurColonne" value="#{empty administrationPlanCompteM61ManagerBean.rechercherColonne(ligne, colonne) ? '&nbsp;' : administrationPlanCompteM61ManagerBean.rechercherColonne(ligne, colonne)}" class="texteGris"/>
                                                <p:graphicImage id="idImage" class="tableauNote"
                                                                value="images/PostIt#{noteManagerBean.tableauNote[noteManagerBean.indiceTableauPage][iColonne][ligne.idLigne].couleur}.png"
                                                                rendered="#{!empty noteManagerBean.tableauNote[noteManagerBean.indiceTableauPage][iColonne][ligne.idLigne]}"/>
                                                <pe:tooltip for="idImage" value="#{noteManagerBean.noteInfoBulle(noteManagerBean.tableauNote[noteManagerBean.indiceTableauPage][iColonne][ligne.idLigne])}" myPosition="left center" atPosition="right center" styleClass="infoBulle infoBulleNote"/>
                                            </p:outputPanel>
                                        </f:facet>
                                        <f:facet name="input">
                                            <h:inputText value="#{administrationPlanCompteM61ManagerBean.valeurModifie}" class="celluleInputTableau"
                                                         maxlength="#{administrationPlanCompteM61ManagerBean.listeColonneLargeur.get(iColonne)}">
                                                <p:ajax event="change" listener="#{administrationPlanCompteM61ManagerBean.modifierValeurColonne(ligne, colonne)}"
                                                        oncomplete="PF('widgetBoutonEnregistrer').show()" 
                                                        update="idValeurColonne :form:idRetourAccueil"/>
                                            </h:inputText>
                                        </f:facet>
                                    </p:cellEditor>
                                    <p:contextMenu for="idColonne" beforeShow="noteMenuContextuelPosition()">
                                        <p:menuitem value="#{empty noteManagerBean.tableauNote[noteManagerBean.indiceTableauPage][iColonne][ligne.idLigne] ? 'Ajouter une note' : 'Modifier la note'}"
                                                    actionListener="#{noteManagerBean.afficherNoteTableau(noteManagerBean.tableauNote[noteManagerBean.indiceTableauPage][iColonne][ligne.idLigne], 'T', ligne.idLigne, iColonne)}"
                                                    oncomplete="PF('widgetNoteDialog').show()"
                                                    update=":form:idDialogNote"/>
                                    </p:contextMenu>
                                </p:columns>
    
                                <f:facet name="footer">
                                    <div class="tableauFooter">
                                        <h:outputText id="idNombreLignesFiltre" 
                                                      value="#{fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61Filtree) == 0 || 
                                                               fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61Filtree) == fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61) ? null : fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61Filtree)}"/>
                                        <h:outputText id="idNombreLignesFiltreSeparateur" 
                                                      value="#{fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61Filtree) == 0 || 
                                                               fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61Filtree) == fn:length(administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61) ? null : '&nbsp;/&nbsp;'}"/>
                                        <h:outputText value="#{administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61.size()}" class="texteGris"/>
                                        <h:outputText value="#{administrationPlanCompteM61ManagerBean.listeRefPlanCompteM61.size() lt '2' ? 'ligne' : 'lignes'}" class="texteGris tableauFooterMarge"/>
                                    </div>
                                </f:facet>
    
                            </p:dataTable>

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je n'utilise pas <p:columns> avec des tris, du coup, je ne sais pas s'il y a un comportement particulier.

    Tu devrais mettre un point d'arrêt dans ta méthode #{administrationPlanCompteM61ManagerBean.trierTableau(ligne, colonne)} et voir si tu y passes au rafraichissement du dataTable et si tu y passes avec quels arguments.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    Au rafraîchissement, la méthode est bien appelée et les paramètres en entrée sont corrects.

    J'ai essayé cette solution qui fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void retrierTableau() {
    
            DataTable tableau = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("form:idRefPlanCompteM61");
    
            tableau.reset();  // Réinitialisation du tableau (suppression des tris et filtres...)
    
            rechercherListeRefPlanCompteM61();  // Relance de la requête (obligatoire)
    
            if (!getTexteRechercher().isEmpty()) {  // Filtre à nouveau 
    
                filtrerTableau();
            }
        }
    Attention aux imports :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import javax.faces.context.FacesContext;
    import org.primefaces.component.datatable.DataTable;

  10. #10
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    Du coup je ferme la discussion.
    Merci pour ton aide.

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

Discussions similaires

  1. PrimeFaces : Datatable et largeur des colonnes
    Par denisduval75 dans le forum JSF
    Réponses: 3
    Dernier message: 20/04/2018, 09h27
  2. Réponses: 1
    Dernier message: 15/08/2014, 11h39
  3. Réponses: 2
    Dernier message: 15/06/2009, 18h40
  4. [JTable] Tri des colonnes
    Par djskyz dans le forum Composants
    Réponses: 10
    Dernier message: 17/03/2005, 10h14
  5. Tri des colonnes d'une DBGRID
    Par Atrebate62 dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/05/2004, 12h20

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