Pb de récupération de donnees : combo html:select dans une JSP

Résolu
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008 - 23 août 2007 à 15:33
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008 - 23 août 2007 à 16:36
Salut,
me voilà bloquée sur un problème sans doute bête mais je tourne en rond. J'espère que quelqu'un pourra m'aider.
J'ai une comboBox dans une JSP qui doit afficher une liste de valeur et lorsque je sauvegarde mon formulaire, je cherche évidemment à récupérer cette donnée (son id).
J'arrive à afficher ma liste de données dans la combo et la sauvegarde se passe bien à priori (pas d'exception) sauf que je récupère tout le temps l'id = 0 à cette combo !!! Je pense qu'il s'agit d'un problème de nommage de variable mais après avoir épuisé pas mal de combinaisons possibles, je ne sais plus quoi faire.

Voici les portions de code qui concerne ce problème : (désolé y'a bcp de fichiers !!! )
Le JSP :
<%...
List res = manager.loadList(null,new SearchCriterion(),false);
request.setAttribute("agences",res);
...%>
...
<html:form action= "createClient.do" focus="code">
 

    <table class="info">
    <tr>
            <td class="oddlabelobligatoire">Agence : </td>
            <td class="odd">
                <html:select property="idAgence" style="width='10px'">
                    <html:options collection="agences" property="id" labelProperty="libelle"/>
                </html:select>
            </td>
    </tr>

Le struts-config :
<form-bean name ="ClientForm"
            type="com.infotel.gda.struts.forms.ClientForm">
            <form-property name="nom" type="java.lang.String" />
            <form-property name="ville" type="java.lang.String" />
            <form-property name="codePostal" type="java.lang.Integer" />
            <form-property name="adresse1" type="java.lang.String" />
            <form-property name="adresse2" type="java.lang.String" />
            <form-property name="adresse3" type="java.lang.String" />
            <form-property name="adresse4" type="java.lang.String" />
            <form-property name="objectifCA" type="java.lang.Double" />
            <form-property name="idAgence" type="java.lang.Integer" />
            <form-property name="idCommercial" type="java.lang.Integer" />
 </form-bean>

Le formulaire :
/**
   * Lien vers l'agence par son id.
   */
private int idAgence;

/**
     *
     * Getter sur l'id de l'agence.
     * @return int : l'id de l'agence
     *
     * @since GDAWeb 1.0
     */
    public int getIdAgence() {
        return idAgence;
    }

    /**
     *
     * Setter sur l'id de l'agence.
     * @param idAgence : l'id de l'agence
     *
     * @since GDAWeb 1.0
     */
    public void setIdAgence(int idAgence) {
        this.idAgence = idAgence;
    }

Le Bean :
/**
   * Agence à laquelle le client est rattachée.
   */
private int idAgence;

/**
     * Récupération de l'agence.
     * @return l'agence du client
     *
     * @since gda_j2ee 1.0
     */
    public int getIdAgence() {
        return idAgence;
    }

    /**
     * Affectation de l'attribut agence .
     * @param idAgence agence
     *
     * @since gda_j2ee 1.0
     */
    public void setIdAgence(int idAgence) {
        this.idAgence = idAgence;
    }

L'Action :
cli.setIdAgence(formulaire.getIdAgence());

Voilà, j'espère que ce n'est pas trop long, j'ai essayer de ne mettre que l'essentiel. Si vous avez des questions ou besoin de plus de code, faites moi signes. Merci d'avance, j'espère que quelqu'un trouvera.

@+++
Egwene

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 août 2007 à 15:50
Dans ton Action struts, fait un System.out.println(formulaire.getIdAgence()); voir ce qu'il t'affiche, mais à première vue, ton code me paraît correct !

Le seul truc que je comprend pas c'est pourquoi tu déclare les champs de ton formulaire en 2 fois : dans le struts-config et dans ton FormBean : déclare les uniquements dans le struts-config, ca prêtera moins à confusion :
<form-bean name= "ClientForm"
            type=" org.apache.struts.actions.DynaActionForm ">
            <form-property name ="nom" type="java.lang.String" />
            <form-property name="ville" type="java.lang.String" />
            <form-property name="codePostal" type="java.lang.Integer" />
            <form-property name="adresse1" type="java.lang.String" />
            <form-property name="adresse2" type="java.lang.String" />
            <form-property name="adresse3" type="java.lang.String" />
            <form-property name="adresse4" type="java.lang.String" />
            <form-property name="objectifCA" type="java.lang.Double" />
            <form-property name="idAgence" type="java.lang.Integer" />
            <form-property name="idCommercial" type="java.lang.Integer" />
 </form-bean>
3
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008
23 août 2007 à 16:15
Merci de m'aider.
C'était ça effectivement.
Ta remarque est très judicieuse car pour ne pas compliqué le problème, j'ai pas expliqué ce point.
En effet j'utilise des DynaActionForm donc à priori j'ai rien dans mon ClientForm sauf que lorsque je faisais cela, j'arrivais même pas à sauvegarder. J'avais une exception du genre : "No getter method for the property idAgence". Bref, je me suis dit qu'il retouvait pas ces champs pour je ne sais quelle raison et donc j'ai essayé de mettre ces champs et leurs accesseurs dans le form ClientForm et là ça marchait mieux puisque que sauvegarder sans erreur excepté cet id à 0.

En fait je crois que j'avais une erreur de nommage au tout début, d'où l'exception No Getter method, ... et après, lorsque j'ai mis les accesseurs dans le formulaire ça pouvait pas marcher. Entre temps j'ai due corriger l'erreur de nommage mais je l'ai pas vu !!!

Merci beaucoup pour ton aide.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 août 2007 à 16:26
Oui en effet, une exception de type noGetter vient très très souvent d'un problème de frappe ! C'est l'inconvénient de struts quand on fait tout à la main : les erreurs arrivent très vite :'(

Il existe des outils pour automatiser cà apparement (pour eclipse, mais j'ai pas testé).
0
cs_egwene Messages postés 54 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 3 avril 2008
23 août 2007 à 16:36
J'ai été sure que c'était un truc bête
Merci encore !
0
Rejoignez-nous