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 :

[struts] scope?


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut [struts] scope?
    salut,

    voici mon problème : j'ai une page qui me permet d'afficher une liste de produits contenus dans ma base de données. Lorsqu'on clique sur un des produits, je voudrai pouvoir afficher tous les elements qui le concerne dans une nouvelle page. Pour cela, je dois pouvoir me "souvenir" du produit cliqué. J'ai entendu des trucs sur mettre mon objet en session, mais je ne sais pas comment le faire et encore moins ou.

    Quelqu'un pourait il eclairer ma lanterne?

    merci
    coralie

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Par défaut
    Salut ! Alors voila se que g compris de l'histoire

    Dans ton fichier struts-config.xml tu as, pour t actions, la possibilitée de determiner leurs portées via l'attribut scope.

    Dans ton cas tu auras une action qui va te permettre de remplir ta listbox et une autre qui va te générer l'affichage.

    L'action de la listbox devra avoir la porté session pour pouvoir etre réutiliser par l'action qui va affichert t informations dans une autre page .

    En effet, si tu met un scope=request, ta collection d'enregistrements destinés à remplir ta listbox ne sera pas accessible pour ton action chargée d'afficher le résultat en fonction du produit selectionné.

    Voici les 4 valeurs de l'attribut scope :

    page: les bean ne sont accessible que dans la page dans laquelle ils sont créés

    request : les bean ne sont accessible que dans les pages traitant de la même requete, c'est à dire la page qui crée le bean, et les pages auquelles la requête est eventuellment transmise.

    session:les bean sont accessible dans tt les pages partageant la meme session

    application : les bean sont accessible dans tt les pages deployer dans une même application

    Ton problème sera resolu avec un scope=session car 2 actions et deux requetes.

    Voila, si c pas kler tu me dis.

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    merci de m'avoir répondu si rapidement

    il y a un truc que je ne comprend pas... c'est quoi un listbox? Moi je voudrai pouvoir réafficher les données dans un formulaire, de façon à avoir un formulaire présaisi ou l'utilisateur pourrait effectuer des modification pour éventuellement mettre à jour le produit... est ce que c ça que tu appelle listbox?

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Par défaut
    Dsl suis un peu naz

    Si tu as une liste de produit sur une page et que tu souhaites afficher un formulaire de saisie avec le detail d'un produit sur une autre page tu n'auras besoin que d'une seule action et le scope sera = a request. Tiens regarde ça c un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      <action path="/editUser"
    	       type="fr.downtempo.GetUserAction"
    			  name="userForm"
    			  validate="false"
    			  scope="request"
    	          >
    			  <forward name="success" path="editUserLink"/>
    	          <forward name="error" path="/user.do"/>
    	  </action>
    EditUser est le path de mon action qui se produit sur clik du lien modifier de la jsp referencant tt les personnes (g un lien modifer par enregistrement)

    GetUserAction est l'action qui va me permettre de recuperer mes personnes.

    remark :

    Tu devras bien sur avoir fait ton ActionForm ( ta classe décrivant ton formulaire de modification) et la jsp correspondante.

    DarkWark

  5. #5
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    merci pour tes explications, je vais essayer ça

    coralie

  6. #6
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    bon en fait, j'y arrive pas...
    le problème est que dans l'action qui est censée afficher le détail, je ne sais pas comment récupérer le produit que je souhite afficher, donc celui sur lequel j'ai cliqué.
    voici le code de mon 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
    27
    28
    29
    30
    31
     
    public ActionForward execute(
    		ActionMapping mapping,
    		ActionForm form,
    		HttpServletRequest request,
    		HttpServletResponse response) {
    		AfficherProduitForm afficherProduitForm = (AfficherProduitForm) form;
    		try
    		{
    			// Creation du contexte pour l'ejb
    			Context c = new InitialContext(); 
    			Object ref = c.lookup("ejb/EjbAdmin");
    			Produit pr;
    			// Appel à l'ejb
    			EjbAdminHome h = (EjbAdminHome) PortableRemoteObject.narrow(ref,EjbAdminHome.class);
    			EjbAdmin bean = h.create(); 
    			Produit a = (Produit) request.getAttribute("produits");
    			System.out.println("a : " + a.getNomProduit());
    			pr = bean.afficherDetailProduit(a.getNomProduit());
    			afficherProduitForm.setDetailProduit(pr);
    			request.setAttribute("monProduit",pr);
    			return mapping.findForward("retourListeProduit");
     
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur[AfficherProduitAction] : " + e);
    			afficherProduitForm.reset(mapping,request);
    			return mapping.findForward("annulationafficherProduitForm");
    		}
    	}
    Moi je pensais que le request.getAttribute me permettrait de récupérer le produit en question, mais je ne sais pas, je ne lui donne peut etre pas le bon argument, car il ne trouve rien, cela renvoie null.

    Voici le code de ma jsp dans laquelle tous les produits sont affichés :
    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
     
    <logic:present name="produits">
          	<logic:iterate id="p" name="produits">
     
        		<tr>
        		<td width="30%">	
        		<html:link scope="request" action="/afficherProduit" target="_self"><bean:write name="p" property="nomProduit"/></html:link>
        		</td>
        		<td width="5%"></td>
        		<td width="15%">
     
        		</td>
        	</tr>
        	</logic:iterate>
          </logic:present>
    est ce que je ne met pas la bonne chose dans le request.getAttribute?
    ou est ce q le problème vient d'autre part à ton avis?

    merci
    coralie

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Par défaut
    Le nom de ta property est :

    <html:link scope="request" action="/afficherProduit" target="_self"><bean:write name="p" property="nomProduit"/></html:link>
    Donc dans :

    Produit a = (Produit) request.getAttribute("produits");
    Tu devrais avoir :
    Produit a = (Produit) request.getAttribute("nomProduit");

  8. #8
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    ben j'ai essayé avec nomProduit, mais ça marche pas non plus, ça me renvoie null...
    est ce que je met mal mes données dans la requete?

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Par défaut
    Vas y montre moi comment tu recupère t données.

  10. #10
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Salut c'est pas plutot un getParameter que tu devrais faire ?
    Pour en être sur, fais un "view source" de la page html qui affiche ta liste (le résultat pas le jsp).
    Si tu y vois quelque chose du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /afficherProduit.do?nomProduit=.....
    Alors c'est getParameter qu'il faut faire et non getAttribute

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Par défaut
    zekey a raison !

  12. #12
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    ok je vais essayer ça
    merci de votre aide...

  13. #13
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    non j'ai pas ça...

    mais je pense savoir pourquoi le request.getAttribute("nomProduit") ne marche pas. C parce que ce n'est pas sur nomProduit que je fais le setAttribute, c'est sur "produits", qui est l'ArrayList dans lequel la liste des produit est stockée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    listeProduit = bean.getProduit();
    			if(listeProduit != null)
    			{
    				request.setAttribute("produits",listeProduit);
     
    				return mapping.findForward("succesGestionProduit");
    			}
    Donc après c produits qu'il faut q je récupère. Mais le truc c que moi quand je veux afficher le détail je veux pouvoir spécifier 1 produit, je ne veux pas la liste. Alors comment faire?
    vous avez une idée?

  14. #14
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    SVP j'ai besoin d'aide... je ne sais plus quoi tester... vous n'avez pas d'idée?

  15. #15
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Reprenon doucement:

    1) Tu remplis une liste et tu la met dans la requete -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setAttribute("produits",listeProduit);
    2) Dans ta liste tu choisis une élément en cliquant sur un lien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:link scope="request" action="/afficherProduit" target="_self"><bean:write name="p" property="nomProduit"/></html:link>
    3) Tu affiche cet élément -->


    Tu as fait le view source que je t'ai demandé, que t'affiche-t-il ?

  16. #16
    Membre confirmé
    Inscrit en
    Novembre 2005
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 163
    Par défaut
    Balance tt ton code !

  17. #17
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Ca me donne un truc du style comme tu avais dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="/JardiNetWeb/afficherProduit.do?nomProduit=%5Bcom.jardinet.object.Produit%401c52e72%2C+com.jardinet.object.Produit%406c6b62%2C+com.jardinet.object.Produit%401fe1934%2C+com.jardinet.object.Produit%40128cbe6%2C+com.jardinet.object.Produit%4016274ea%2C+com.jardinet.object.Produit%40e9ebe1%2C+com.jardinet.object.Produit%4017d327c%2C+com.jardinet.object.Produit%407d7a04%5D" target="_self"><input type="button" name="action" value="Détail" style="text-decoration: none"></a>

  18. #18
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    du coup j'ai fait un getParameter au lieu de getAttribute mais ça marche pas quand meme...

  19. #19
    Membre averti
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Bon voici mon code :

    Action qui affiche le détail d'un produit :

    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
     
    public class AfficherProduitAction extends Action {
     
    	// --------------------------------------------------------- Instance Variables
     
    	// --------------------------------------------------------- Methods
     
    	/** 
             * Method execute
             * @param mapping
             * @param form
             * @param request
             * @param response
             * @return ActionForward
             */
    	public ActionForward execute(
    		ActionMapping mapping,
    		ActionForm form,
    		HttpServletRequest request,
    		HttpServletResponse response) {
    		AfficherProduitForm afficherProduitForm = (AfficherProduitForm) form;
     
    		try
    		{
    			// Creation du contexte pour l'ejb
    			Context c = new InitialContext(); 
    			Object ref = c.lookup("ejb/EjbAdmin");
    			Produit pr;
    			// Appel à l'ejb
    			EjbAdminHome h = (EjbAdminHome) PortableRemoteObject.narrow(ref,EjbAdminHome.class);
    			EjbAdmin bean = h.create(); 
     
    			String a = request.getParameter("nomProduit");
    			System.out.println("a : " + a);
    			pr = bean.afficherDetailProduit(a);
    			if(pr != null)
    				afficherProduitForm.setDetailProduit(pr);
     
    			return mapping.findForward("retourListeProduit");
     
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur[AfficherProduitAction] : " + e);
    			afficherProduitForm.reset(mapping,request);
    			return mapping.findForward("annulationafficherProduitForm");
    		}
    	}
     
    }
    Ensuite, la jsp qui affiche le formulaire complé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
    16
    17
    18
    19
     
    <html:form action="/afficherProduit">
      <table width="50%" border="0" align="center">
        <tr> 
          <td width="50%" height="31"><font color="#000000" size="-1" face="Verdana,Helvetica,sans-serif"><strong>
          Nom du produit :</strong></font></td>
          <td width="50%"><html:text property="nomProduit" /></td>
        </tr>
        <tr> 
          <td width="50%" height="31"><font color="#000000" size="-1" face="Verdana,Helvetica,sans-serif"><strong>
          Provenance :</strong></font></td>
          <td width="50%"><html:text property="provenance" /></td>
        </tr>
        <tr> 
          <td width="50%" height="31"><font color="#000000" size="-1" face="Verdana,Helvetica,sans-serif"><strong>
          Descriptif :</strong></font></td>
          <td width="50%"><html:text property="descriptif" /></td>
        </tr>
       .....
    Dans mon action, j'affiche la valeur récupérée par la variable a lors du request.getPrameter, et ça me donne un truc bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    17:23:57,484 INFO  [STDOUT] a : [com.jardinet.object.Produit@118ae23, com.jardinet.object.Produit@1508393, com.jardinet.object.Produit@ee36ee, com.jardinet.object.Produit@1584bf1, com.jardinet.object.Produit@1e1befb, com.jardinet.object.Produit@1c16c5f, com.jardinet.object.Produit@1b20e65, com.jardinet.object.Produit@cf2781]
    [/code]

  20. #20
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    C'est le bean:write qui pose un probleme, il a l'air d'afficher une liste

    Juste pour tester 2-3 choses
    remplace le html:link par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href='<html:rewrite page="/afficherProduit.do" />?nomProduit=<bean:write name="p" property="nomProduit"/>' >ton texte</a>
    et regarde si le résultat est plus clair, si oui test le getParameter sinon il faut remplacer le bean:write ou le corriger

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Struts-config.xml] interet de l'attribut scope
    Par CPI_en_mousse dans le forum Struts 1
    Réponses: 4
    Dernier message: 08/06/2007, 09h05
  2. Réponses: 2
    Dernier message: 30/05/2007, 20h25
  3. [STRUTS] problème de scope
    Par DarkWark dans le forum Struts 1
    Réponses: 32
    Dernier message: 25/02/2006, 01h47
  4. Réponses: 4
    Dernier message: 11/02/2005, 14h20
  5. [struts] scope application
    Par otminou dans le forum Struts 1
    Réponses: 2
    Dernier message: 16/09/2004, 09h52

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