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 :

options dynamique


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut options dynamique
    Bonjour,

    debutant java-struts, je cherche a faire qq chose qui a forcement ete fait 1 000 000 000 de fois au minimum et pour lequel je ne trouve aucune explication claire sur le net (alors que j'imagine que ca doit exister forcement, mais la saloperie de proxy ici filtre 99% des sites, heureusement pas dvp).
    Le truc est simplement le remplissage d'une liste select avec des valeurs en base, j'ai un objet BDD qui contient une methode static get comme suit :
    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
    public class BDD implements java.io.Serializable
    {
            private int idBDD;
            private String nom;
            public BDD() {}
     
            public int getIdBDD() { return this.idBDD; }
            public String getNom() { return this.nom; }
     
            public static BDD[] getListeBDD(Connection connexion)
            {
                    CallableStatement st = null;
                    ResultSet rs = null;
                    String requete = "BEGIN ? := get_BDDs(); END;";
                    ArrayList listeBDD = new ArrayList();
                    BDD lBDDRetour[] = null;
                    try
                    {
                            st = connexion.prepareCall(requete);
                            st.registerOutParameter(1, OracleTypes.CURSOR);
                            st.execute();
     
                            rs = (ResultSet) st.getObject(1);
     
                            while(rs.next())
                            {
                                    BDD maBDD = new BDD();
                                    maBDD.setIdBDD( rs.getInt("idBdd") );
                                    maBDD.setNom( rs.getString("nom") );
                                    listeBDD.add( maBDD );
                            }
     
                            rs.close();
                            st.close();
                            BDD lBDD[] = new BDD[listeBDD.size()];
                            for ( int i = 0; i < listeBDD.size(); i++ )
                            {
                                    lBDD[i] = (BDD) listeBDD.get(i);
                            }
                            lBDDRetour = lBDD;
                    }
                    catch(Exception ex)
                    {
                            ex.printStackTrace();
                    }
     
                    return lBDDRetour;
            }
    }
    La copie de vecteur ne me plait deja pas des masses dans ce code, mais passons....
    dans mon fichier de config struts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form-bean name="frmBDD" type="org.apache.struts.action.DynaActionForm">
          <form-property name="id" type="java.lang.Integer"/>
          <form-property name="description" type="java.lang.String"/>
          <form-property name="idSchemaBaseOrg" type="sgdt.metier.BDD[]"/>
    </form-bean>
    Ce qui me permetra de mettre la valeur initiale de ma combo quand j'aurai trouve la syntaxe.
    (j'ote ce qui ne sert a rien pour mon probleme)
    dans 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
    public class ActionBDD extends ActionFWT
    {
            public ActionForward execute(ActionMapping mapping, ActionForm form,
                            HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, SQLExc
    eption
            {
                    Connection lCnx = null;
                    DynaActionForm lForm = (DynaActionForm) form;
     
                    // Lecture de la table BDD pour remplir la combo.
                    System.out.println("Lecture combo");
                    if ( lCnx == null )
                    {
                            lCnx = getConnection(request);
                    }
                    BDD lBDDs[] =  BDD.getListeBDD(lCnx);
     
                    request.setAttribute("beanBDD", lBDDs);
                    return mapping.findForward("next");
            }
    }
    et dans ma page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:options name="beanBDD" property="idBDD" labelProperty="nom"/>
    qui genere le superbe code d'erreur :

    javax.servlet.ServletException: No getter method available for property idBDD for bean under name beanBDD
    Qu'ai-je donc completement loupe comme notion ???
    Toute aide est la bienvenue car la je seche et personne autour de moi ne semble apte a me fournir un coup de main digne de ce nom.
    Merci d'avance
    Fred.

  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
    Essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:options collection="beanBDD" property="idBDD" labelProperty="nom"/>
    Par contre, je ne comprends pas pourquoi tu codes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                            BDD lBDD[] = new BDD[listeBDD.size()];
                            for ( int i = 0; i < listeBDD.size(); i++ )
                            {
                                    lBDD[i] = (BDD) listeBDD.get(i);
                            }
    Dans la jsp, tu pourrais très bien afficher directement le contenu de l'ArrayList de bean BDD que tu as appelé listeBDD sans passer par l'étape précédente.

  3. #3
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut
    Tout d'abord, merci d'avoir repondu.

    Ca change un peu le message, dans le sens ou je l'attendais, mais je n'aime pas me manifester sans tester :

    javax.servlet.ServletException: No getter method available for property nom for bean under name beanBDD
    Pour l'autre pb, effectivement ce serai possible, mais je ne connais pas la taille du vecteur avant d'etre alle au bout de mon curseur, je ne peux donc pas allouer le bon nombre d'elements des le debut.
    Je suis certain qu'il existe une methode pour me donner un tableau d'objet a partir d'une arrayList mais je ne la connais pas et la doc ici n'est pas hyper riche, d'ou les maladresses

    Une autre idee ?

  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
    Excuse-moi d'insister mais je ne comprends pas pourquoi tu tiens absolument à constituer un tableau d'objets à partir d'une ArrayList d'objets.

    Tu peux très bien afficher une ArrayList d'objets dans la jsp sans connaître sa taille.

    Sinon, tu as bien codé le tag html:options dans un tag html:select ?
    Si c'est le cas, montre-nous comment.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    je suis de l'avis de c_nvy concernant ta conversion de ton arraylist en tableau.
    par contre pour tes options tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html:select ...>
      <logic:iterate collection="${beanBDD}" id="bdd">
        <html:option value="${bdd.idBDD}"><c:out value="${bdd.nom}"/></html>
      </logic:iterate>
    </html:select>

  6. #6
    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
    Citation Envoyé par marieR
    je suis de l'avis de c_nvy concernant ta conversion de ton arraylist en tableau.
    par contre pour tes options tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html:select ...>
      <logic:iterate collection="${beanBDD}" id="bdd">
        <html:option value="${bdd.idBDD}"><c:out value="${bdd.nom}"/></html>
      </logic:iterate>
    </html:select>
    Ce code ne fonctionnera qu'en J2EE 1.4.

    Il y a plus simple, sans logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="idSelecte">
       <html:options collection="listeBDD" property="idBDD" labelProperty="nom"/>
    </html:select>
    en ayant fait au préalable un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("listeBDD",listeBDD) ;
    Autre solution avec l'ArrayList listeBDD, propriété du form-bean :

    dans l'Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DynaActionForm lForm = (DynaActionForm) form;
    lForm.setListeBDD(listeBDD) ;
    dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html:form action="tonAction">
      <html:select property="idSelecte">
         <html:optionsCollection property="listeBDD" value="idBDD" label="nom"/>
      </html:select>
    </html:form>

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

Discussions similaires

  1. [WB18] champ Menu: sous-options dynamiques?
    Par fdelepine dans le forum WebDev
    Réponses: 0
    Dernier message: 10/12/2013, 14h55
  2. Créer des options dynamiquement
    Par gwyohm dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/07/2010, 16h56
  3. option dynamique avec JS et submit
    Par duboisa dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 19/02/2010, 16h12
  4. options dynamiques dans un select
    Par duboisa dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 18/02/2010, 14h45
  5. [Dojo] Menu digit : option dynamique
    Par kelthalorn dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 24/08/2009, 16h29

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