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

Struts 1 Java Discussion :

Encore des problemes avec struts/hibernate


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Encore des problemes avec struts/hibernate
    salut à tous,

    me revoilà avec le problème de la récupération de donnée avec hibernate, après avoir réussi pour le test de la connexion avec la BD et la récupération de nombre d'enregistrements, maintenant je veux récupérer tous les enregistrements de ma table utilisateur, j'ai essayé ce code:

    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
    66
    67
     
     
    public class UserLoginAction extends Action {
    	/*
    	 * Generated Methods
    	 */
    	Integer id;
    	String email;
    	String password;
    	String passF;
    	String mailF, mailTXT;
    	List L1,L, user;
    	int i;
    	Iterable utilisateur;
    	List utilisateurs;
     
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) {
     
    		UserLoginForm userLoginForm = (UserLoginForm) form; 
     
     
    		// instanciation d'objet utilisateur
        	utilisateur utilisateur = new utilisateur();
     
    		// récupération des champs de la BD
    		id=utilisateur.getIdUtilisateur();
    		email=utilisateur.getEmailUtilisateur();
    		password=utilisateur.getPasswordUtilisateur();
     
     
    		//récupération des champs du formulaire
    		mailF=userLoginForm.getUserName();
    		passF=userLoginForm.getPassword();
    		mailTXT=userLoginForm.getTXT_Courriel();
     
     
    		//instanciation de DAO utilisateur
     
    		utilisateurDAO daoutil= new utilisateurDAO();
     
       		utilisateurs = daoutil.getSession().createQuery("select email_utilisateur from utilisateur ").list();
     
    		Iterator iter = utilisateurs.iterator();
     
    		while( iter.hasNext()) 
    		{
    			utilisateur element = (utilisateur) iter.next();
     
    		}
     
    		daoutil.getSession().close();
     
    		i=utilisateurs.size();
    			if(i==0)
    			{
     
    				request.setAttribute("test", "not ok :(");
    				return mapping.findForward("failure");
    			}
     
    			request.setAttribute("test", "oki");
    			return mapping.findForward("success");
     
    	}
    }
    ceci m'affiche une exception dont la tace est la suivante:

    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
     
    java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 
     \-[IDENT] IdentNode: 'email_utilisateur' {originalText=email_utilisateur}
     
    	org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:140)
    	org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:702)
    	org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:531)
    	org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:645)
    	org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    	org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
    	org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
    	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
    	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
    	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
    	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
    	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
    	com.yourcompany.struts.action.UserLoginAction.execute(UserLoginAction.java:136)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    la ligne 136 fait référence à la ligne:

    utilisateurs = daoutil.getSession().createQuery("select email_utilisateur from utilisateur ").list();


    Merci pour vos réponses

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 22
    Points
    22
    Par défaut
    Essai plutôt : "select u.email_utilisateur from utilisateur as u"

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utilisateurs = daoutil.getSession().createQuery("select email_utilisateur from utilisateur ").list();
    la List "utilisateurs" contient alors des éléments du même type que "email_utilisateur", cad des String.
    la boucle while va échouer : le cast (utilisateur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while( iter.hasNext()) 	{
    	utilisateur element = (utilisateur) iter.next();
    }
    il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while( iter.hasNext()) 	{
    	String email = (String) iter.next();
    }
    Si tu veux ramener des utilisateurs, tu dois écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utilisateurs = daoutil.getSession().createQuery("from utilisateur").list();

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Salut mattheox,

    j'ai essayé de suivre ce que tu m'as proposé mais ça na pas marché, toujours la même exception

    la référence sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    utilisateurs = daoutil.getSession().createQuery("select email_utilisateur from oxy_utilisateur").list();

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Quand j'utilise la requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    utilisateurs = daoutil.getSession().createQuery("from oxy_utilisateur").list();
    le test passe, et m'affiche le nombre d'enregistrement:
    request.setAttribute("test", i);
    return mapping.findForward("success");


    mais ça ne marche pas qd je fais la requête avec
    createQuery(" select email_utilisateur from oxy_utilisateur")


    il me reste aussi à savoir comment traiter ces données pour les afficher dans une jsp.?? mais je ne sais pas comment faire

    stp aidez moi

  6. #6
    Membre confirmé Avatar de JoloKossovar
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 532
    Points : 576
    Points
    576
    Par défaut
    Si tu as du mal a formuler tes requete sql, je te conseille d utiliser Criteria. Ces classes inclut dans hibernate permettent de creer des requetes de facon simple sans taper une seul ligne de sql.
    http://www.javapassion.com/j2ee/hibernatecriteria.pdf

    Pour les afficher dans ta jsp ce sera très simple, tu rentres tes donnée dans une liste et tu fera un c:forEach dans ta jsp sur la liste.

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Syham Voir le message
    mais ça ne marche pas qd je fais la requête avec
    createQuery(" select email_utilisateur from oxy_utilisateur")
    Le nom des colonnes que tu dois mettre est le nom de la colonne de ton objet Hibernate.

    puisque tu as écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    email=utilisateur.getEmailUtilisateur();
    j'imagine que l'objet Utilisateur est de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Utilisateur {
    private String emailUtilisateur;
    public void setEmailUtilisateur(String s) {
    this.emailUtilisateur = s;
    }
    public String getEmailUtilisateur() {
    return this.emailUtilisateur;
    }
    }
    donc, tu dois écrire le select sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createQuery(" select emailUtilisateur from oxy_utilisateur")
    Attention, après, quand tu utilises l'iterator, tu récupères une list de String.. donc tu dois caster en String et non en (Utilisateur)

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    dsl pour le dérangement, mais je n'arrive pas à afficher la liste des Email de mes utilisateurs. j'utilise le code d'itération suivant:
    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
     
     
      utilisateurs = daoutil.getSession().createQuery("select emailUtilisateur from utilisateur").list();
     
          		Iterator iter = utilisateurs.iterator();
     
    		ArrayList Liste1 = new ArrayList();
     
    		while(iter.hasNext()) 
    		{
    			String email = (String) iter.next();
    			 Liste1.add(email);
     
    		}
     
    		daoutil.getSession().close();
     
    		i=utilisateurs.size();
    			if(i==0)
    			{
    				request.setAttribute("test", "not ok ");
    				return mapping.findForward("failure");
    			}
     
    			request.setAttribute("sih", Liste1);
    			request.setAttribute("test", i);
    			return mapping.findForward("success");
     
    	}
    }
    et dans ma page jsp de forward réussi, j'utilise le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    <h2>  Bienvenue!  </h2>
    <div><%=request.getAttribute("test") %></div>
     
      <table border="1">
    												<logic:iterate id="ligne" name="sih">
    													<tr>
    												<logic:iterate id="colonne" name="ligne">
    													<td><bean:write name="colonne"/></td>
    												</logic:iterate>
    </tr>
    												</logic:iterate>
    </table>
    mais ceci n'affiche rien

    Je comprends pas d'ou vient l'erreur !!!

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    Salut Syham,

    Avant de faire ton findforward ... verifie le contenu de tes variable List1 et i en passant en debug sous eclipse.

    Si tu sais pas comment l'utiliser afficher tes variables dans une MessageBox ou sur ta fenetre console.

    En attendant de tes news...

    Bon Courage.

Discussions similaires

  1. Encore des problemes avec HTTPService
    Par le_contact dans le forum Flex
    Réponses: 0
    Dernier message: 04/02/2009, 09h29
  2. Probleme avec Struts et Hibernate
    Par 0coco0 dans le forum Struts 1
    Réponses: 5
    Dernier message: 28/08/2008, 16h03
  3. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 01/01/2008, 00h26
  4. probleme avec struts+hibernate
    Par crossmen dans le forum Struts 1
    Réponses: 5
    Dernier message: 23/05/2007, 20h18
  5. probleme avec struts+hibernate
    Par crossmen dans le forum Struts 1
    Réponses: 3
    Dernier message: 17/05/2007, 20h07

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