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 :

[Debutant] besoin d'explication pour construire un ActionForm avec un lien href


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut [Debutant] besoin d'explication pour construire un ActionForm avec un lien href
    Bonjour

    Ma question est, je pense, assez bête, mais j'ai quelque problème avec un lien href qui doit renvoyer des propriété à mon ActionForm.

    J'ai un boucle for qui m'affiche autant de lien que de Customer en affichant l'id, le name et le firstName du customer. Et selon le lien sur lequel je clique, je doit récuperer l'id.

    Voici mon code JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <% int taille = ControllerTableCustomer.createTableCustomer(); 
    for (int i= 0 ; i < taille ; i++) { 
    request.setAttribute("customerBean",ControllerTableCustomer.createCustomerBean(i));%>
    <tr><td>
    	<a href="selectPersonAction.do">
    		<bean:write scope="request" name="customerBean" property="id"/>
    		<bean:write scope="request" name="customerBean" property="name"/>
    		<bean:write scope="request" name="customerBean" property="firstName"/>
    	</a>
    	<html:link href="selectPersonAction.do" paramId="id" paramName="customerBean"	/>
    </td></tr>
    <%} %>
    Le SelectPersonForm est bien construit, mais le champ id n'est pas rempli.

    Voici le SelectPersonForm :

    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
    public class SelectPersonForm extends ActionForm {
     
    	private static final long serialVersionUID = 1L;
     
    	private String id;
     
    	public final String getId() {
    		return id;
    	}
     
    	public final void setId(String newCustBean) {
    		id = newCustBean;
    	}
     
    	public final ActionErrors validate(ActionMapping mapping,
    			HttpServletRequest request) {
     
    		ActionErrors errors = new ActionErrors();
    		return errors;
    	}
     
    }
    mon SelectPersonAction :

    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
    public class SelectPersonAction extends Action {
     
    	/**
             * 
             */
    	public final ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
    		SelectPersonForm selectPersonForm = (SelectPersonForm) form;
     
    		System.out.println("SelectPersonAction, SelectPersonForm toString: " + selectPersonForm);
    		System.out.println("SelectPersonAction, CustomerBean string: " + selectPersonForm.getId());
     
    		return mapping.findForward("");
    	}
     
    }
    et mon résultat de println :
    SelectPersonAction, SelectPersonForm toString: com.altis.welcome.controller.SelectPersonForm@1e91259
    SelectPersonAction, CustomerBean string: null
    Pour moi le probleme vient de la page JSP où je n'arrive pas à envoyer les information à mon ActionForm, mais j'arrive pas à savoir comment faire.
    J'ai bien vue la faq, mais rien ne repond à ma question (ou j'ai rien capté...)

    Merci de votre aide
    Blaise

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Par défaut
    Bonjour,

    Les paramètres que tu passes de ta jsp vers l'action ne passent pas par un formulaire ... donc c'est normal que tu obtienne Null ..
    Dans ta jsp tu as fait : request.setAttribute("customerBean", ...
    pour pouvoir récupérer ce param dans ton action tu dois faire :

    param = request.getAttribute("customerBean")

    Biensur il faudra faire attention au cast en fonction du type ...

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Mais pourquoi quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write scope="request" name="customerBean" property="id"/>
    L'id, le name et le firstName sont récupere sans souci ;
    je n'ai pas besoin de faire un param = request.getAttribute("customerBean") avant ?
    Donc pourquoi devrai-je le faire avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:link href="selectPersonAction.do" paramId="id" paramName="customerBean"/>
    ??


  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Par défaut
    Non c'est pas dans la jsp que tu dois le faire mais dans ton action ...

    Vulgairement, ton request est comme un assenceur, tu met un truc dedant au RDC et tu le récupère au 1er étage ...
    Ici ta JSP est le RDC et ton action est le 1er étage !!

    Donc quand tu fait, dans la JSP :

    request.setAttribute("customerBean",ControllerTableCustomer.createCustomerBean(i));

    Tu pose dans ton ascenceur un objet "customerBean". Ensuite tu dois le récupérer au 1er étage (l'action) avec :

    param = request.getAttribute("customerBean");

    C'est compris ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    ben, châ marche pô...

    donc je fais, dans mon Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class SelectPersonAction extends Action {
     
    	public final ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
    		CustomerBean cust = (CustomerBean) request.getAttribute("customerBean");
    		System.out.println("(CustomerBean)request.getAttribute(\"customerBean\")) = " + cust);
    		return mapping.findForward("");
    	}
    }
    mais là, j'ai un null.

    j'ai essayé en faisant
    CustomerBean cust = (CustomerBean) request.getSession().getAttribute("customerBean");
    mais ça marche pas mieux.

    Le probleme, c'est que j'en met un paquet de CustomerBean dans ma request via la boucle for, donc quand je fais un resquest.getAttribut, ou mieux, il devrait me renvoyer le dernier request.setAttribut(customerBean), non ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Par défaut
    Je sais pas exactement ce que ton code est censé faire ... mais déjà vérifie dans ta jsp que lorque tu fait : ControllerTableCustomer.createCustomerBean(i) ça te crée bien un bean ...

    Ensuite, pour les objet que tu met dans ton request, tu peux les nommer différament :tu rajoute la valeur de ton compteur i au nom "customerBean" ("customerBean"+valeurDuCompteur) et tu envoi aussi via le request la valeur du compteur pour chaque lien ...

    Comme ça tu récupère la valeur du compteur ensuite ton objet avec le nom "customerBean"+valeurDuCompteur

    Autrement, que veux-tu faire exactement ??? parceque la tu crée des bean dans la jsp qui est censée servir juste à l'affichage .. !!!!

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Citation Envoyé par lucimed Voir le message
    Autrement, que veux-tu faire exactement ??? parceque la tu crée des bean dans la jsp qui est censée servir juste à l'affichage .. !!!!
    Je voudrais renvoyer certain element (l'id) du bean choisi à mon ActionForm.
    Etant donné que j'arrive à recuper des info du Bean pour l'affichage, pourquoi n'arriverai-je pas à les renvoyer à un ActionForm ?

    Ca doit bien être faisable, mais je sais pas comment.

    En tout cas, je te remercie de prendre un peu de temps pour aider le pauvre boulet que je suis.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Par défaut
    il te manque un ptit paramêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <html:link href="selectPersonAction.do" paramId="id" paramName="customerBean" paramProperty="id"/>
    paramId correspond au nom qui sera spécifié via la requête "GET"
    => selectPersonAction.do?id=3 par exemple dans ton cas

    il ne te restera plus qu'à faire dans ton action un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String id=request.getParameter("id");

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Par défaut
    Oulala !!!! ATTENTION !!!

    Ce que je t'ai expliqué marche dans le sens action vers JSP ...
    Désolé tu m'as un peu embrouillé !!
    Pour le faire dans l'autre sens (JSP vers action) : tu doit passer les paramètres dans l'URL :

    <a href="selectPersonAction.do?id=valeur">

    ensuite dans l'action tu fais :

    id = request.getParameter("id");

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Aprés mix des réponse, aide des collegues, etc, voici ma réponse qui fonctionne :

    Dans ma page jsp, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <% int taille = ControllerTableCustomer.createTableCustomer(); 
    						for (int i= 0 ; i < taille ; i++) { 
     
    CustomerBean cust = ControllerTableCustomer.createCustomerBean(i); %>
    <tr><td>
    <a rref="selectPersonAction.do?id=<%=cust.getId()%>"><%=cust.getName()%><%=cust.getFirstName()%>
    </a>
    </td></tr>
    <%} %>
    Et dans mon Action, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String id = request.getParameter("id");
    System.out.println("id du CustomerBean selectionné : " + id);
    Et voila.
    Mon probleme : en faite, je voulais passer par un ActionForm, alors que ce n'est pas possible.

    Puis, de toutes façon, j'ai des erreur dans mon architecture struts.

    Merci de votre aide.

    Blaise

  11. #11
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Il est bien dommage de mettre du code Java dans les jsp quand tu utilises Struts.

    Normalement, dans l'Action qui s'exécute avant l'affichage de la jsp, il faut mettre la collection d'objets de type CustomerBean dans le scope.

    Ensuite, dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <logic:iterate name="customerList" id="customer">
       <tr>
          <td>
             <html:link action="selectPersonAction" paramName="customer" paramId="id" paramProperty="id">
                <bean:write name="customer" property="name"/>
                <bean:write name="customer" property="firstName"/>
             </html:link>
          </td>
       </tr>
    </logic:iterate>
    sans oublier d'ajouter au début de la jsp les directives taglib qui pointent sur les tld logic, html et bean.

    Et dans l'Action SelectPersonAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String id = request.getParameter("id");

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 113
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Il est bien dommage de mettre du code Java dans les jsp quand tu utilises Struts.
    Quand je parlais d'erreur dans mon architecture Struts, je parlait notament du code java.

    Je suis en train de cherché comment utilisé les taglib pour les remplacer.

    Si lundi, j'arrive toujours pas à utiliser correctement core:forEach, je reveindrais vous poser la question...


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

Discussions similaires

  1. Besoin d'explications pour Hough
    Par zolotaya dans le forum Traitement du signal
    Réponses: 14
    Dernier message: 25/04/2013, 21h17
  2. [Debutant] Besoin d'aide pour les array
    Par Sayrus dans le forum C#
    Réponses: 3
    Dernier message: 07/09/2008, 00h03
  3. Besoin d'explication pour WHERE EXISTS(SELECT NULL..
    Par Mr Pink Eyes dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/06/2007, 12h22
  4. Besoin d'explication pour l'impression
    Par mygwel dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 25/05/2006, 11h49
  5. [Debutant] Besoin d'aide pour modifier un tableau...
    Par CyberTwister dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/03/2006, 15h14

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