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 :

Remplir un tableau composé de plusieurs tables SQL


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Par défaut Remplir un tableau composé de plusieurs tables SQL
    Bonjour,

    Alors voila ça fait un petit moment que je me prends la tête pour créer un tableau qui est composé de plusieurs champs réparties sur plusieurs tables SQL.

    En effet, j'aimerais afficher une liste de commande de livres pour le client connecté. J'aimerais afficher des champs de la table COMMANDE et de la table LIVRE (qui passe par une table de relation en passant car cardinalité n---n).

    J'ai essayé de réaliser ceci avec le composant graphique "webuijsf:table" que j'ai drag en drop et sa fonctionnalité "Table Layout" en lui fournissant une array d'objet COMMANDES, mais il est incapable d'afficher les champs des autres tables.

    Ma deuxième tentative a donc consisté a exécuter une requête SQL qui s'occupe de récupérer les bon champs sur les différentes table puis de remplir mon tableau à partir de la requête SQL qui est sauvé dans une liste. Une fois de plus sans succès car je ne sais pas comment relié mon tableau à la liste que j'ai remplie par les résultats de ma requête SQL.

    Fonction de remplissage par requete SQL :

    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
     
    protected void buildOrdersTableBySQL(Customer cus) {
     
     
            try {
                Session session = HibernateUtil.getSessionFactory().getCurrentSession();
                Transaction tx = session.beginTransaction();
     
                Query q = session.createSQLQuery("SELECT b.title, b.author, o.dateDepart FROM BOOK b, `ORDER` o, BOOK_ORDER bo, CUSTOMER c WHERE b.idBook = bo.idBook AND bo.idOrder = o.idOrder AND o.idCustomer = c.idCustomer AND c.idCustomer = :id");
                q.setParameter("id", cus.getIdCustomer());
     
     
                customerOrders = (Set) q.list();
     
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        }
    Que faut-il que je fasse ? Merci de m'aider.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Tu peux faire un bean POJO avec les valeurs que tu dois afficher, et une fonction à part qui transforme tes objets issus de la base à ton objet final..
    c'est plus flexible au cas de changement de la vue ou de la base..

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Par défaut
    J'ai réalisé une classe style POJO qui contient uniquement les informations que je veux afficher. Ma fonction exécute une requête SQL et je récupère le tout dans une List du type du POJO que j'ai créé.

    Maintenant je n'arrive pas à lier cette liste avec mon tableau ? Quel doit être le code sur ma page ?

    Voici le code de ma fonction :

    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
     
    private List<CustomOrder> co;
     
    protected void buildOrdersTableBySQL(Customer cus) {
     
     
            try {
                Session session = HibernateUtil.getSessionFactory().getCurrentSession();
                Transaction tx = session.beginTransaction();
     
                Query q = session.createSQLQuery("SELECT b.title, b.author, o.dateDepart FROM BOOK b, `ORDER` o, BOOK_ORDER bo, CUSTOMER c WHERE b.idBook = bo.idBook AND bo.idOrder = o.idOrder AND o.idCustomer = c.idCustomer AND c.idCustomer = :id");
                q.setParameter("id", cus.getIdCustomer());
     
     
                co = q.list();
     
     
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        }
    Ma classe CustomOrder :

    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
     
    public class CustomOrder {
     
        private Integer idOrder;
        private String title;
        private String author;
        private Date dateDepart;
     
        public CustomOrder(Integer idOrder, String title, String author, Date dateDepart) {
            this.idOrder = idOrder;
            this.title = title;
            this.author = author;
            this.dateDepart = dateDepart;
        }
     
        public CustomOrder() {
     
        }
     
        public String getAuthor() {
            return author;
        }
     
        public void setAuthor(String author) {
            this.author = author;
        }
     
        public Date getDateDepart() {
            return dateDepart;
        }
     
        public void setDateDepart(Date dateDepart) {
            this.dateDepart = dateDepart;
        }
     
        public Integer getIdOrder() {
            return idOrder;
        }
     
        public void setIdOrder(Integer idOrder) {
            this.idOrder = idOrder;
        }
     
        public String getTitle() {
            return title;
        }
     
        public void setTitle(String title) {
            this.title = title;
        }
    }

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as une liste de CustomOrder: orders

    utilise dataTable:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <h:dataTable value=#{bean.orders} var="order">
    <h:column>
    <f:facet name="header"> Title</f:facet>
    <h:outputText value="#{order.title}"/>
    </h:column>
    </h:dataTable>

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 167
    Par défaut
    Après 3 jours passé intensément sur ce problème, j'en arrive finalement à trouver (enfin !) une solution.

    J'ai essayé une tonne de solution, en passant par les addEntity, requêtes HQL ou divers manipulations de listes d'objets avec iterator et companie...

    LA seule qui fonctionne dans mon cas est celle-ci :

    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
     
        protected void buildOrdersTableBySQL(Customer cus) {
     
     
            try {
                Session session = HibernateUtil.getSessionFactory().getCurrentSession();
                Transaction tx = session.beginTransaction();
     
                Query q = session.createSQLQuery("select o.idOrder, b.title, b.author, o.dateDepart from BOOK b, COMMAND o, BOOK_ORDER bo, CUSTOMER c where b.idBook = bo.idBook and bo.idOrder = o.idOrder and o.idCustomer = c.idCustomer and c.idCustomer = :id")
                        .setResultTransformer(Transformers.aliasToBean(CustomOrder.class));
                q.setParameter("id", cus.getIdCustomer());
     
                co = q.list();
     
     
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        }
    Comme vous pouvez le voir je passe par un "Transformer" pour récupérer les champs de ma requête et en construire une liste de "CustomOrder" selon l'ordre respectif. Fonction très puissante et simple d'utilisation .
    J'ai ensuite "bindé" ma table JSF avec la liste de CustomOrder co et le tour est joué.

    Merci Sniper pour ton aide.

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

Discussions similaires

  1. [Dojo] Remplir un Grid à partir d'une table SQL
    Par lagoule dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 10/06/2009, 11h13
  2. [MySQL] regrouper dans un tableau les donnée de plusieur table SQL
    Par Mais.Ouais dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/05/2009, 10h47
  3. Réponses: 2
    Dernier message: 19/06/2007, 11h00
  4. [Requête]Affichage d'un tableau à partir de 2 tables SQL
    Par sp4ever dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/10/2005, 11h32

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