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 1.1] [html:options collection]


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bbo1991
    Profil pro
    oidfsdfsd
    Inscrit en
    Novembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : oidfsdfsd

    Informations forums :
    Inscription : Novembre 2006
    Messages : 100
    Par défaut [Struts 1.1] [html:options collection]
    Hello à tous j'ai un p'tit pbm avec la balise <html:option>
    Le résultat voulu est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <select name="client"> 
    <option value="1">Marc</option> 
    <option value="2">Jean</option> 
    ... 
    </select>
    J'ai lu la solution trouvée là http://www.developpez.net/forums/showthread.php?t=23705
    mais ça marche pas.
    alors je vous passe mes codes,:
    - j'ai une actionForm qui contient ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private String nom; 
    private String description; 
    private Vector CustomersList;
    le tout avec les getters et setters qui vont avec.

    Ensuite une action pour peupler tout ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     ... 
    Customer[] cus=u.findCustomers();//accès BDD en arrière plan 
    Vector custos=new Vector(); 
    for(int i=0;i<cus.length;i++){ 
    custos.add(cus[i]); 
    } 
    formulaire.setProfilsForm(custos);
    Enfin le code de ma vue jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select name="editClientForm" property="client"> 
    <html:options name="editClientForm" collection="CustomersList" property="idClient" labelProperty="nomClient"/> 
    </html:select>
    Les propriétés "idClient" et "nomClient" étant des propriétés du bean "Customer".

    Et là j'ai l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.apache.jasper.JasperException: Cannot find bean under name CustomersList
    Est-ce que celà implique qu'il faut que CustomersList soit un bean au lieu d'un Vector ou d'un Array??? Si oui prière de m'expliquer comment procéder, on crée donc une autre classe autres que l'action form et l'action, si oui comment l'intégrer dans struts-config.xml ??en tant que quoi pour effectuer la liaison avec l'action??
    J'suis super perdu là.
    Merci d'avance pour vos réponses.

    RMQ:J'utilise Struts 1.1

  2. #2
    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
    Tout d'abord, quand tu utilises Struts, il vaut mieux respecter les conventions de nommage java, si tu veux que cela fonctionne correctement.

    Les propriétés doivent commencer par une minuscule.
    Il faut donc renommer CustomersList en customersList.

    Sinon, dans le code de l'Action que tu as posté, je ne vois nulle part quelque chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonActionForm formulaire=(TonActionForm) form ;
    formulaire.setCustomersList(custos);
    mais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    formulaire.setProfilsForm(custos);
    Mets-tu à jour le Vector customersList de l'ActionForm dans la méthode setProfilsForm ?

  3. #3
    Membre confirmé Avatar de bbo1991
    Profil pro
    oidfsdfsd
    Inscrit en
    Novembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : oidfsdfsd

    Informations forums :
    Inscription : Novembre 2006
    Messages : 100
    Par défaut
    Hello,
    Les propriétés doivent commencer par une minuscule.
    Il faut donc renommer CustomersList en customersList.
    ça c'est élémentaire j'ai pas fait copie colle intégrale de mon code mais je l'ai tapé d'où cette erreur de saisie, désolé.

    Sinon j'ai trouvé un moyen pour parvenir à mes fins mais je sais pas si elle est très propre.
    On abandonne d'abord les Vectors pour utiliser une classe spéciale de Struts utilisée pour les option list: la classe "LabelValueBean".

    Dans la classe Action, on crée un tableau d'objets LabelValueBean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LabelValueBean[] listCustos=new LabelValueBean[custos.length];
    for(int i=0;i<custos.length;i++){
            listCustos[i]=new LabelValueBean(custos[i].getNOM(),custos[i].getID());
          }
    "custos" étant ici un tableau d'objets Client pris dans le SGBD.
    Puis on instancie chaque objet "LabelValueBean" avec le nom et l'id de chaque client (le label et la value qui seront utilisés + tard dans l'html).

    Puis on affecte l'array à l'objet HttpServletRequest passée en paramètre de la méthode ActionForward:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     httpServletRequest.setAttribute("listCustos",listCustos);
    Voilà pour le code de l'action!!!

    Dans la partie jsp, on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select name="editClientForm" property="clt">
    <html:options collection="listCustos" property="value" labelProperty="label"/>
    </html:select>
    Et ça marche nickel

    Le véritable truc je pense n'a pas été l'utilisation d'objets LabelValueBean mais plutôt l'affectation de ces derniers à l'objet HttpServletRequest.
    Si on l'affectait à l'objet ActionForm ça marche pas, on n'arrive pas à retrouver le tableau de LabelValueBean d'où ma légère frustration....

  4. #4
    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
    Si tu initialises le LabelValueBean via le setter de l'ActionForm, essaie avec le tag html:optionsCollection comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="clt">
       <html:optionsCollection property="listCustos"/>
    </html:select>
    En Struts 1.1, tu es peut-être obligé de mettre l'attribut name. A tester.

    Sinon, avec le Vector, ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="clt">
       <html:optionsCollection property="customersList" value="idClient" label="nomClient"/>
    </html:select>

Discussions similaires

  1. html:options - collection de string
    Par valarko dans le forum Struts 1
    Réponses: 3
    Dernier message: 17/05/2013, 15h40
  2. Quelques précisions sur html:options collection
    Par weed dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/10/2008, 12h02
  3. html:options - collection dans un objet en session-
    Par gazier20 dans le forum Struts 1
    Réponses: 3
    Dernier message: 13/06/2007, 10h12
  4. html:options collection (remplir au demarrage)
    Par zurich dans le forum Struts 1
    Réponses: 3
    Dernier message: 05/08/2006, 12h04
  5. [Struts] html:options avec deux Collections!
    Par Sniper37 dans le forum Struts 1
    Réponses: 5
    Dernier message: 15/06/2005, 15h35

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