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 :

jsf + hibernate


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Par défaut jsf + hibernate
    salut,
    je veux afficher la résultat d'une liste dans une page jsp: afficher.jsp...en utilisant JSF..
    en fait, j'ai utilisé une requête qui va retourné la fusion de deux tables,en suite je stock la résultat dans une liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       public  List sellectAll() throws Exception {
        org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery ("from Sujet s,User u where u.idUser=s.idUser ORDER BY s.idSujet");
     
        List list;
        list =  q.list();
     
        return list;
      }
    Dans la page afficher.jsp j'affiche la list :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      <h:dataTable captionClass="Style2" bgcolor="#FFFF99" value="#{sujetBean.list}" var="p" width="90%" border="1">
                <table bgcolor="#FFFF99" width="90%" border="1">
       <h:column>
      <tr class="Style2">
          <td><h:outputText value="#{p.idSujet}" /></td>
          <td><h:outputText value="#{p.titre}" />       
        <td><h:outputText value="#{p.date}" /></td>
        <td><h:outputText value="#{p.nom}" />&nbsp;
        <h:outputText value="#{p.prenom}" /></td>
      </tr>
     
    </h:column>
    </table>
    		</h:dataTable>
    mais sa ne fonction pas!!!!!

    NB: (idSujet,titre,date) se sont des attribues de la classes Sujet
    (nom,prenom) se sont des attribues de la classes User

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 37
    Par défaut
    Essai plutôt:
    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
     
     <h:dataTable value="#{sujetBean.list}" var="p" >         
           <h:column>
                 <h:outputText value="#{p.idSujet}" />
          </h:column>
          <h:column>
                 <h:outputText value="#{p.titre}" />  
          </h:column>
          <h:column>
                 <h:outputText value="#{p.date}" /> 
          </h:column> 
          <h:column>
                 <h:outputText value="#{p.nom} #{p.prenom}" />  
          </h:column> 
    </h:dataTable>
    en fait, <h:dataTable> crée un tableau pour toi.
    Inutile de lui ajouter un <table>

    Remarque, j'ai enlevé les autres attributs dans <h:dataTable> pour juste garder le strict nécessaire.

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Tout à fait d'accord avec la modification faite par afroman côté JSF.

    Côté Java, il faut éviter de faire comme cela, car le getter sera appelé plusieurs fois par requête, et donc tu feras autant de fois une requête vers ta BD !

    C'est très laid de faire du code d'accès à la couche de données dans un bean JSF, mais déjà, tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private List<Sujet> sujets = null;
     
    public List<Sujet> getList() {
        if (sujets == null) {
            sujets = ... // Remplit ta liste ici, ce ne sera fait qu'une fois, puisqu'après, sujets sera != de null.
        }
        return sujets;
    }
    Dernier point : le "ça ne fonctionne pas", ce n'est guère explicite. Heureusement il y avait pas mal de choses qui n'allaient pas, donc on est pas étonnés que cela ne fonctionne pas, mais la prochaine fois, pense à mettre les symptomes (table vide, stacktrace, message d'erreur, comportement, etc.)
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Par défaut
    salut,
    Merci pour vos réponse..
    afroman : j'ai essaie seulement de modifier le style avec la table html...facile..
    romaintaz : en fait, j'ai la fonction bean que tu m'a décrit
    je pense que j'ai pas bien expliqué le problème.
    j'ai creer une requet qui retourne la jointure de 2 tables...(User et Sujet)
    alors je veux stocker la résultat dans une liste..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       public  List sellectAll() throws Exception {
        org.hibernate.Transaction tx = session.beginTransaction();
            Query q = session.createQuery ("from Sujet s,User u where u.idUser=s.idUser ORDER BY s.idSujet");
     
        List list;
        list =  q.list();
     
        return list;
      }
    le problème est dans la déclaration de cette liste..
    je veux que ma liste contient les deux classes
    c'est a dire au lieu d'ecrire:
    je veux que ma list contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List <User><Sujet> list; ---par exemple---
    est ce que c'est possible???
    et s'il y a une autre façon..

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Ce n'est pas possible comme cela. Il faut en fait définir une interface qui sera implémentée par User et Sujet.

    Par exemple, si tu appelles ton interface Toto, il te suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class User implements Toto {
        ...
    }
    public class Sujet implements Toto {
        ...
    }
    et ainsi, ta liste sera List<Toto>.

    Attention toutefois, compte tenu des noms des classes, est-ce que c'est une bonne idée de mélanger des utilisateurs et des sujets dans la même liste ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 37
    Par défaut
    Si j'ai bien compris, Sujet possède une clé étrangère se référant à User(idUser).
    La solution la plus simple et la moins coûteuse est de mettre à contribution la relation many-to-one de Sujet.
    Ainsi ta requête sera simplement comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query q = session.createQuery ("from Sujet");
    et dans tes pages JSP/xhtml tu feras ainsi:
    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
     
    <h:dataTable value="#{sujetBean.list}" var="p" >         
           <h:column>
                 <h:outputText value="#{p.idSujet}" />
          </h:column>
          <h:column>
                 <h:outputText value="#{p.titre}" />  
          </h:column>
          <h:column>
                 <h:outputText value="#{p.date}" /> 
          </h:column> 
          <h:column>
                 <h:outputText value="#{p.user.nom} #{p.user.prenom}" />  
          </h:column> 
    </h:dataTable>
    Remarque, c'est pas conseillé de faire appel à hibernate directement dans tes beans. Externalisant cette tâches dans des classes métiers tu y gagneras en flexibilité et en temps de maintenance.

    Bonne chance

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 140
    Par défaut
    je vous remercie pour votre collaboration,

    en fait, l'idée de mélangé dans une liste.. est d'avoir un liste qui contient des sujets avec le nom et le prenom de l'utilisateur qui a créer le sujet..!!

    Pour ma class bean je fait l'appel a une fonction qui va appeler sellectAll() d'un autre class.. je fait pas appeler à hibernate directement dans mes beans

Discussions similaires

  1. Implémentation Spring Avec JSF-Hibernate
    Par wajdopovitch dans le forum Spring
    Réponses: 2
    Dernier message: 04/04/2009, 21h40
  2. JSF & Hibernate Validator
    Par wajdopovitch dans le forum JSF
    Réponses: 2
    Dernier message: 17/01/2009, 12h13
  3. pb d'utilisation JBoss avec richFaces + JSF + Hibernate
    Par psycho_xn dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 06/11/2008, 22h54
  4. jboss-seam/jsf/hibernate : probleme de connexion
    Par mellissacold dans le forum Seam
    Réponses: 5
    Dernier message: 08/04/2008, 18h59
  5. recupération d'exception JSF Hibernate
    Par *alexandre* dans le forum JSF
    Réponses: 1
    Dernier message: 22/09/2006, 16h36

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