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 :

afficher objet avec <bean:write>


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 34
    Points
    34
    Par défaut afficher objet avec <bean:write>
    Bonjour,
    Voila je suis débutant en J2EE avec Struts + Hibernate et je n'arrive pas à afficher un objet user dans ma page jsp en utilisant <bean:write>

    J'ai une erreur type:
    org.apache.jasper.JasperException: Cannot find bean: "usa" in scope: "session"


    Voici le code de ma page jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <bean:define id="usa_id" name="usa" scope="session" type="test.javabeans.Usager"/>
     
    <bean:write name="usa_id" property="nom"/><br>
    <bean:write name="usa_id" property="prenom"/><br>
    et le code de mon UsagerAction

    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
     
    public class UsagerAction extends Action {
     
    	public ActionForward execute(
    			ActionMapping mapping,
    			ActionForm form,
    			HttpServletRequest request,
    			HttpServletResponse response)
    		throws Exception{
     
    		UsagerDAO user = new HibernateDAOFactory().getUsagerDAO();
     
    		 DynaValidatorForm dynaForm = (DynaValidatorForm) form;
     
    		 request.getSession().setAttribute("usa",user.findUsagerDAO(dynaForm.getString("nom")));
     
    	  	return mapping.findForward("affiche");
    	}
     
     
    }
    J'ai déja testé un insert et un affichage complet de ma table: ca fonctionne
    Par contre, avec ma méthode findUsagerDAO(...) qui me retourne un objet type Usager, je n'arrive pas à l'afficher...?
    Je dois surement faire une erreur dans la déclaration de mon <bean:write> ou dans l'envoi de mon objet user....

  2. #2
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    es tu sur que ta recherche renvoie un resultat?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    ma méthode findUsagerDAO() fait:
    user = (Usager) session.load(Usager.class, nom);
    et fait un :
    return user

    Cet juste une base de test, ma table contient 2 champs "nom" et "prénom" avec quelques enregistrements.
    Au lancement, je renseigne un juste un nom précis ds un formulaire qui normalement devrait m'afficher le nom et le prénom trouvé ds la table.

    Par contre, je ne sais pas si au moment du return, mon objet contient réellement quelquechose.
    Quel code je pourrais mettre pour faire une vérification préalable avant mon return mapping.findForward("affiche"); ???

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Heu... je pense que tu as deux sol :
    soit ton env de dev te permet de faire du debug et dans ce cas tu mets un point d'arrêt au début de ta méthode "execute" et tu exéctes pas à pas en surveillant les valeurs de tes variables (c'est je pense le plus pratique)

    soit :
    - tu redéfinis la méthode toString() dans la classe test.javabeans.Usager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Usager  {
    private String nom;
    private String prenom;
     
    @override
    public String toString(){
       return new StringBuffer("nom = ").append(nom).append(" prenom = ").append(prenom).toString();
    }
     
    }
    - ensuite tu mets dans ton Action :
    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
     
    public class UsagerAction extends Action {
     
    	public ActionForward execute(
    			ActionMapping mapping,
    			ActionForm form,
    			HttpServletRequest request,
    			HttpServletResponse response)
    		throws Exception{
     
    		UsagerDAO user = new HibernateDAOFactory().getUsagerDAO();
     
    		 DynaValidatorForm dynaForm = (DynaValidatorForm) form;
     
    		 request.getSession().setAttribute("usa",user.findUsagerDAO(dynaForm.getString("nom")));
     
     
    System.out.println(new StringBuffer("objet Usage = ").append(user.findUsagerDAO(dynaForm.getString("nom"))).toString());
     
    System.out.println(new StringBuffer("objet Usage en session = ").append(request.getSession().getAttribute("usa")).toString());
     
    	  	return mapping.findForward("affiche");
    	}
     
     
    }
    Ca te dit quoi ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Ah et j'ai oublié un test quue tu pex faire dans ta jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <% System.out.println(" session attribut usa = ");
    System.out.println(request.getSession().getAttribute("usa")); %>
     
     
    <bean:define id="usa_id" name="usa" scope="session" type="test.javabeans.Usager"/>
     
    <bean:write name="usa_id" property="nom"/><br>
    <bean:write name="usa_id" property="prenom"/><br>
    et tu vois ce qu'il t'écris
    (tu peux coupler les deux tests, ca peut te permettre de voir plus clair plus rapidement )

    Aller bon courage,

    A+

    Anne

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Merci AnneB pour ton aide, je viens de faire les 2 tests et ca me renvoie des valeurs null:

    objet Usage = null
    objet Usage en session = null
    session attribut usa = null

    Comme ci ma méthode findUsagerDAO ne renvoyait rien:

    Voila le code de ma méthode:
    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
     
    public Usager findUsagerDAO (String nom){
    		org.hibernate.Session session = HibernateDAOFactory.creerConnexion();
    	Usager user = null;
    		try{
    			session.beginTransaction();
     			user = (Usager) session.load(Usager.class, nom);
     			session.getTransaction().commit();
     
    		}catch (org.hibernate.HibernateException e) {
    		e.printStackTrace();
    		}finally{
    			try{
    			HibernateUtil.closeSession();
    			}catch (org.hibernate.HibernateException e1) {
    			e1.printStackTrace();
    			}
    		}
    		return user;
    	}
    Je me suis peu être trompé dans la facon de remonté les valeurs
    Vu mon niveau en Java,Struts,hibernate, j'ai repiqué du code dans des tutos mais ca ne fonctionne pas!!
    Sinon est ce que quelqu'un aurait une "méthode type" avec struts pour récupérer un enregistrement complet d'une table en fournissant la valeur d'un champ "nom" dans un formulaire. ???

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Bah là je ne vois pas trop comment t'aider parce que hibernate je n'ai jms pratiqué

    Mais tu devrais aller poster ton pb sur le forum d'hibernate parce que la tu auras certainement plus de réponses à ton problème....

    M'enfin juste avant je serais toi je vérifierais tout de meme ce que font mes méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UsagerDAO user = new HibernateDAOFactory().getUsagerDAO();
    et
    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
    public Usager findUsagerDAO (String nom){
    		org.hibernate.Session session = HibernateDAOFactory.creerConnexion();
    	Usager user = null;
    System.out.println("nom en paramètre de la fonction : "+nom);
    // si le nom est null ou mal renseigné alors c'est que ton pb vient d'avant l'appel à cette fonction mais comme à priori là tu as passé le param en dur normalement ya pas de raison qu'il y ait des pb
    		try{
    			session.beginTransaction();
     			user = (Usager) session.load(Usager.class, nom);
     			session.getTransaction().commit();
     			System.out.println("user : "+user);
    		}catch (org.hibernate.HibernateException e) {
    		e.printStackTrace();
    		}finally{
    			try{
    			HibernateUtil.closeSession();
    			}catch (org.hibernate.HibernateException e1) {
    			e1.printStackTrace();
    			}
    		}
    System.out.println("user retourné : "+user);
    // si le user est null alors que ton nom est bien renseigné et que le tuple en Base de Données est présent (primary key = nom) alors le pb doit venir de ton utilisation d'hibernate
    		return user;
    	}
    à l'aide comme je te l'ai dit précédemment de System.out.println par exemple

    Et si en effet tu vois que ton acces par hibernate te retourne des user nul c'est que certainement tu as oublié de faire un truc pour mettre en place hibernate Et alors va poster sur le forum Hibernate ...



    Voilà, bon courage à toi

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Merci pour ton aide,
    J'ai posté sur le forum hibernate
    J'ai fait des tests, le contenu de "nom" est correct par contre user = null.
    Je n'ai pas tout compris dans ta phrase sur "primary key = nom"
    Faut-il forcément que l'argument de la méthode session.load() soit la clé primaire de ma table.
    Avant ce n'était pas le cas, j'ai modifié ma table et maintenant j'ai une nouvelle erreur:
    org.hibernate.LazyInitializationException: could not initialize proxy - no Session

    Si tu as des infos sur le fonctionnement de cette méthode session.load c'est la bienvenue... sinon merci quand même pour ton aide apporté jusqu'a présent...
    A+ Phil

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par Philog Voir le message
    Je n'ai pas tout compris dans ta phrase sur "primary key = nom"
    Faut-il forcément que l'argument de la méthode session.load() soit la clé primaire de ma table.
    En fait je me suis mal exprimée.... J'avais mis ca en pensant que le nom de la personne est ta clé primaire mais de tte facon c'est idiot parce que cela voudrait dire que tu ne pourrait pas enregistrer deux personnes de la même famille portant le même nom....
    Mais surtout les "Dupont" risqueraient d'être trè très embêtés...
    lol

    Bah j'espère que tu trouvera ta réponse dans le forum hibernat
    En tout ca n'hésite pas à mettre le lien vers ton nouveau topic hibernate ici... On ne sait jamais, quelqu'un qui aurait le même souci que toi ca pourrait lui rendre service.....

    A+

  10. #10
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Merci, la suite de cette discussion est donc redirigé vers le forum d'hibernate
    ici

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

Discussions similaires

  1. Afficher objets avec propriétés imbriqués
    Par capitaine dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 18/07/2008, 10h06
  2. Affichage avec <bean:write
    Par metalcoyote dans le forum Struts 1
    Réponses: 1
    Dernier message: 13/09/2006, 18h52
  3. Combiner <bean:message> avec <bean:write>
    Par Nullos Oracle dans le forum Struts 1
    Réponses: 23
    Dernier message: 12/06/2006, 03h30
  4. [struts][]taglib bean] afficher html avec write
    Par mlequim dans le forum Struts 1
    Réponses: 6
    Dernier message: 04/11/2005, 18h44
  5. [Struts][JSP] Format avec bean:write
    Par cowa dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 19/05/2004, 18h16

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