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-Layout] remplir layout:select avec une valeur et un libelle


Sujet :

Struts 1 Java

  1. #1
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut [Struts-Layout] remplir layout:select avec une valeur et un libelle
    cela fonctionne :
    Action initialisant le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     lesEquipements = equipement.getEquipementByEmploye();
    		 String[] valeursEquipement = new String[lesEquipements.size()];
    		 for(int i =0;i<lesEquipements.size();i++)
    			 valeursEquipement[i] = lesEquipements.elementAt(i).getLibelle();
    		 listepanne.set("listequipement", valeursEquipement);

    fichier struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form-bean name="frmAddReclamation" type="arab.soft.struts.gmao.DynaActionFormAddReclamation">
          <form-property name="panne" type="java.lang.String"/>
          <form-property name="listpanne" type="java.lang.String[]"/>
          <form-property name="equipement" type="java.lang.String"/>
          <form-property name="listequipement" type="java.lang.String[]"/>
        </form-bean>

    page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <l:select key="Equipement"name="frmAddReclamation" property="equipement">
    <l:options name="frmAddReclamation" property="listequipement"/>
    </l:select>


    ça fonctionne mais je veux bien afficher la liste et garder les id de la liste pour les utiliser après;
    j'ai consulté quelques discussion ;
    ce que j'ai compris c'est qu'il faut utiliser un objet Collection avec deux attributs : value et label >> et dans la balise select on mentionne : options : property et propertylabel.
    mon souci c'est comment remplir cet objet collection de tel façon à avoir deux attributs value et label

  2. #2
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    j'ai suivi les indications de ce post :
    http://www.developpez.net/forums/arc...hp/t-7107.html

  3. #3
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Il faut utiliser une collection d'objets plutôt qu'un tableau de String.

    Vu ton code, il semblerait que lesEquipements soit une collection d'objets Equipement.
    Si c'est bien le cas, c'est celle-ci qu'il faut utiliser à la place du tableau de String.
    Donc au lieu de mettre valeursEquipement dans listequipement, il faut mettre lesEquipements et ensuite coder ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <layout:select key="Equipement" property="equipement">
       <layout:options collection="listequipement" property="id" labelProperty="libelle"/>
    </layout:select>

  4. #4
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Sans oublier de modifier le type de listequipement dans la balise <form-property>.

  5. #5
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    merci pour ton aide;
    juste je voulais savoir le type à mentionner dans le fichier struts-config est ce c'est bien java.util.Collection. car j'ai eu l'erreur indiquant qu'il ne peut pas faire le casting d'un vector à un String;
    une deuxieme question : id et libelle c'est bien les attributs de ma classes ?
    car j'arrive pas à comprendre comment il peut les récupérer sans des getters !!!

    merci encore une fois

  6. #6
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Si lesEquipements est de type Vector, il faut mettre java.util.Vector dans l'attribut type de la balise form-property.

    Dans ton code, j'ai vu que tu faisais un getLibelle(). J'en ai donc déduit que la classe Equipement avait pour propriété libelle et comme tu parlais aussi d'un id, j'en ai également déduit que id était aussi une propriété de Equipement.

    Dans la classe Equipement, tu as bien des getters sur id et libelle non ?

  7. #7
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    oui bien sûr : j'ai des getters et setters et j'ai compris ce que tu veux dire:
    j'ai deux attributs idEquipement et libelle avec leurs propres geters&seters : mais j'ai pas saisi comment peut-t-il les récupérer sans écrire explicitement les geters !!
    peut etre que c'est bête ce que je suis entrain de dire

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    listequipement est un Vector d'objets Equipement ayant pour propriétés idEquipement et libelle.

    En codant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <layout:select key="Equipement" property="equipement">
       <layout:options collection="listequipement" property="idEquipement" labelProperty="libelle"/>
    </layout:select>
    Struts-Layout va automatiquement appeler les getters et setters sur les propriétés idEquipement et libelle pour chaque objet Equipement constituant le Vector.

  9. #9
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    j'ai fait ce ci comme tu m'a expliqué : mais j'ai eu l'erreur suivante :
    javax.servlet.ServletException: org.apache.commons.beanutils.ConversionException: Cannot assign value of type 'java.util.Vector' to property 'listpanne' of type '[Ljava.lang.String;'

    page jsp :
    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
    <l:form action="/Ajout">
     
    	<l:select key="ProfilPanne" name="frmAddReclamation" property="panne" multiple="true" >
    		<l:options name="frmAddReclamation" collection="listpanne" property="idPanne" labelProperty="libelle"  />
    	</l:select>
    	<l:select key="Equipement"name="frmAddReclamation" property="equipement">
    		<l:options name="frmAddReclamation" collection="listequipement" property="idEquipement" labelProperty="libelle"/>
    	</l:select>
    	<l:select  property="Priorité" name="frmAddReclamation" key="Priorité:">
    		<l:option value="3"key="Faible" ></l:option>
    		<l:option value="2" key="Normale"></l:option>
    		<l:option value="1" key="Elevée"></l:option>
    		<l:options name="frmAddReclamation" property="ListePriorité"/>
    	</l:select>
    	<l:textarea key="Descripition de la panne:"property="description"  isRequired="true"></l:textarea>
    	<l:submit>Valider Reclamation</l:submit>
    	<l:reset>Effacer</l:reset>
    </l:form>



    struts config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form-bean name="frmAddReclamation" type="arab.soft.struts.gmao.DynaActionFormAddReclamation">
          <form-property name="panne" type="java.lang.String"/>
          <form-property name="listpanne" type="java.util.Vector"/>
          <form-property name="equipement" type="java.lang.String"/>
          <form-property name="listequipement" type="java.util.Vector"/>
          <form-property name="description" type="java.lang.String"/>
          <form-property name="Priorité" type="java.lang.String"/>
          <form-property name="ListePriorité" type="java.lang.String[]"/>
        </form-bean>

    Action d'initialisation :

    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
      int id=Integer.parseInt(request.getAttribute("id").toString());
     
    	     DynaActionFormAddReclamation listepanne =(DynaActionFormAddReclamation)form;
    		 ProfilPanne pannes = new ProfilPanne();
    		 Vector<ProfilPanne> lesPannes = new Vector<ProfilPanne>();
    		 lesPannes = pannes.getLesPannes();
    		 /*
    		 String[] valeursEquipements = new String[lesPannes.size()];
    		 for(int i =0;i<lesPannes.size();i++)
    			 valeursEquipements[i] = lesPannes.elementAt(i).getLibelle();
    		 */
    		 listepanne.set("listpanne", lesPannes );
     
     
     
    		 Equipement equipement=new Equipement();
    		 Vector<Equipement> lesEquipements = new Vector<Equipement>();
    		 equipement.setEmploye(new Employe(id));
    		 lesEquipements = equipement.getEquipementByEmploye();
    		/*
    		 String[] valeursEquipement = new String[lesEquipements.size()];
    		 for(int i =0;i<lesEquipements.size();i++)
    			 valeursEquipement[i] = lesEquipements.elementAt(i).getLibelle();
    		 */
    		 listepanne.set("listequipement", lesEquipements);

  10. #10
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Je n'ai pas l'habitude d'utiliser les DynaActionForm mais après réflexion, je ne pense pas que tu puisses initialiser une propriété de type Vector comme tu essaies de le faire.
    Je te conseille donc d'utiliser plutôt une ActionForm.

  11. #11
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    j'ai toujours un souci ; j'ai changé le code et maintenat j'ai une exception de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Exception creating bean of class arab.soft.struts.gmao.DynaActionFormAddReclamation: {1}
    le code est le suivant :
    page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <l:select key="Panne:" name="frmAddReclamation" property="ProfilPanne" multiple="true" >
    								<l:options name="frmAddReclamation" collection="listpanne" property="idPanne" labelProperty="libelle"  />
    							</l:select>
    							<l:select key="Equipement:"name="frmAddReclamation" property="Equipement">
    								<l:options name="frmAddReclamation" collection="listequipement" property="idEquipement" labelProperty="libelle"/>
    							</l:select>
    struts_config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     <form-bean name="frmAddReclamation" type="arab.soft.struts.gmao.DynaActionFormAddReclamation">
          <form-property name="ProfilPanne" type="java.lang.String"/>
          <form-property name="listpanne" type="java.lang.Vector"/>
          <form-property name="Equipement" type="java.lang.String"/>
          <form-property name="listequipement" type="java.lang.Vector"/>
          <form-property name="description" type="java.lang.String"/>
          <form-property name="Priorité" type="java.lang.String"/>
          <form-property name="ListePriorité" type="java.lang.String[]"/>
        </form-bean>
    Action initialisant la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ProfilPanne pannes = new ProfilPanne();
    		 request.setAttribute("listpanne", pannes.getLesPannes());
    		 Equipement equipement=new Equipement();
    		 equipement.setEmploye(new Employe(id));
    		 request.setAttribute("listequipement", equipement.getEquipementByEmploye());
    		 return(mapping.findForward("afficher"));

  12. #12
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    NB : malgrès que j'ai ajouté implements serializable à toutes mes classes métiers comme Equipement ...

  13. #13
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    C'est normal, tu as mis java.lang.Vector au lieu de java.util.Vector.

    Sinon, as-tu vu ma réponse précédente ?

  14. #14
    Membre régulier Avatar de med_alpa
    Inscrit en
    Juillet 2005
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 134
    Points : 87
    Points
    87
    Par défaut
    oui ça marche ; merci pour ton aide et le temps consacré pour m'expliqué tous ça.
    j'ai chhagé en java.util.Vector.

    concernanat :
    Sinon, as-tu vu ma réponse précédente ?
    je me suis lancé déja dans les DynaactionForm donc je vais perdre beaucoup de temps à refaire tous dès le début en plus je ne maitrise pas cette méthode (malgrès que je maitrise toujours pas celle des DynaActionForm).


    merci c_nvy.
    je sais que je demande trop mais si tu peux jeter un coup d'oeil sur ce post
    http://www.developpez.net/forums/sho...d.php?t=522455

    et est ce que c'est juste de garder mes classes métiers avec des "implements serializable" ça touche pas au modele MVC2.
    merci.

    pour ceux qui ont besoin du code :
    action initialisant la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //les deux methodes retournent un vector
    	     ProfilPanne pannes = new ProfilPanne();
    		 request.setAttribute("listpanne", pannes.getLesPannes());
    		 Equipement equipement=new Equipement();
    		 equipement.setEmploye(new Employe(id));
    		 request.setAttribute("listequipement", equipement.getEquipementByEmploye());
    		 return(mapping.findForward("afficher"));
    strurts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form-bean name="frmAddReclamation" type="arab.soft.struts.gmao.DynaActionFormAddReclamation">
          <form-property name="ProfilPanne" type="java.lang.String"/>
          <form-property name="listpanne" type="java.util.Vector"/>
          <form-property name="Equipement" type="java.lang.String"/>
          <form-property name="listequipement" type="java.util.Vector"/>
          <form-property name="description" type="java.lang.String"/>
          <form-property name="Priorité" type="java.lang.String"/>
          <form-property name="ListePriorité" type="java.lang.String[]"/>
        </form-bean>
    page jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <l:select key="Panne:" name="frmAddReclamation" property="ProfilPanne" multiple="true" >
    								<l:options name="frmAddReclamation" collection="listpanne" property="idPanne" labelProperty="libelle"  />
    							</l:select>
    							<l:select key="Equipement:"name="frmAddReclamation" property="Equipement">
    								<l:options name="frmAddReclamation" collection="listequipement" property="idEquipement" labelProperty="libelle"/>
    							</l:select>

  15. #15
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Je suis contente que ça fonctionne mais je ne comprends pas bien comment ça peut fonctionner.
    D'après le code que tu as donné, tu mets les Vector dans le scope request et donc tu n'initialises plus les propriétés correspondantes de la DynaActionForm.
    Or, quand tu codes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <l:options name="frmAddReclamation" collection="listpanne" property="idPanne" labelProperty="libelle"  />
    normalement, tu affiches le contenu de la propriété listpanne de la DynaActionForm de name frmAddReclamation.
    Comme tu ne l'as pas initialisé, cela devrait être vide.
    Donc, là, ça me dépasse.

    Sinon, tu as bien fait d'ajouter implements Serializable dans tes classes de type JavaBean.
    D'ailleurs, si tu regardes la classe ActionForm de Struts, elle implémente l'interface Serializable.

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

Discussions similaires

  1. Select avec une valeur par défaut variable
    Par Toulousaing dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/11/2014, 10h05
  2. [Oracle] Comment remplir un select avec une requête SQL
    Par Farow dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/10/2011, 10h30
  3. remplir un dataset avec une valeur null
    Par bellak dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/10/2008, 18h49
  4. remplir un model avec les valeurs d'une JList
    Par soujava dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 15/05/2008, 21h11
  5. remplir une <select> avec une liste
    Par sassien dans le forum Servlets/JSP
    Réponses: 24
    Dernier message: 24/04/2008, 18h21

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