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 :

ArrayList et formulaire


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut ArrayList et formulaire
    Bonjour,

    J'ai pas mal cherché et testé différentes solutions mais j'obtiens toujours une erreur (pas toujours la même ça dépend du test).
    Je ne veux pas utiliser la librairie layout.

    Voila mon code actuel :

    Form :

    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
     
    private ArrayList<String> strValeursProfil = new ArrayList<String>();
     
    public ArrayList<String> getStrValeursProfil()
    {
    	return strValeursProfil;
    }
     
    public void setStrValeursProfil(ArrayList<String> strValeursProfil)
    {
    	this.strValeursProfil = strValeursProfil;
    }
     
    public String getStrVal(int index)
    {
    	(this.strValeursProfil.get(index));
    }
     
    public void setStrVal(int index, String strVal)
    {
    	this.strValeursProfil.set(index,strVal) ;
    }
    La liste strValeursProfil est bien initialisée comme il faut avant l'affichage.

    JSP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <logic:iterate id="strValeursProfil" name="formName" property="strValeursProfil" indexId="i">
    <td>
    	<html:text name="strValeursProfil" property="strVal"  indexed="true"/>
    </td>
    </logic:iterate>
    Avec ça il me dit à l'affichage que je n'ai pas de getter :
    No getter method for property: "strValeursProfil" of bean: "formName"
    Pourquoi n'utilise-t-il pas le getter avec index ?
    Merci d'avance

  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
    Quand tu ajoutes l'attribut indexed="true" dans le tag html:text, il va exécuter le getter avec index sur le nom que tu as donné dans l'attribut name, donc dans ton cas, getStrValeursProfil(int index) et non getStrVal(int index).

    Comme en Struts, il faut éviter les surcharges de méthode dans l'ActionForm, il faudrait mettre une autre valeur dans name que celui de l'ArrayList.

    Enfin, sinon, il y a un autre problème.

    Lorsque tu codes property="strVal" dans le tag html:text, cela suppose que l'ArrayList strValeursProfil est une ArrayList d'objets ayant pour propriété strVal.
    Or, dans ton cas, strValeursProfil est une ArrayList de String.
    Tu ne peux donc pas utiliser l'attribut property="strVal".

    Alors, tu as deux solutions.

    Soit tu indexes toi-même l'ArrayList comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <logic:iterate id="strValeursProfil" name="formName" property="strValeursProfil" indexId="i">
    <td>
    	<html:text property="strValeursProfil[${i}]"/>
    </td>
    </logic:iterate>
    Ceci suppose que ton appli soit J2EE 1.4 ou plus pour que l'EL ${i} soit interprétée.
    Sinon, il faut utiliser la tld struts-html-el.tld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <logic:iterate id="strValeursProfil" name="formName" property="strValeursProfil" indexId="i">
    <td>
    	<html-el:text property="strValeursProfil[${i}]"/>
    </td>
    </logic:iterate>
    Soit tu remplaces l'ArrayList de String par une ArrayList d'objets ayant pour propriété strVal.
    Et dans ce cas, tu pourras utiliser l'attribut indexed="true" et le getter indexé.

  3. #3
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Merci !!!

    J'apprécie énormément les explications très claires en plus. Bien plus utile que la simple solution.

    Par contre pour information j'ai du changer un petit peu dans la jsp en ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate id="strValProfil" name="formName" property="strValeursProfil" indexId="i" >
    <td align="center">
    	<html:text name="formName" property="strValProfil[${i}]" size="10" maxlength="12"/>
    </logic:iterate >
    Si j'avais id = property dans le iterate, il confondait les getters indexés et les non indexés et me donnait une erreur comme quoi il ne trouvait pas le getter non indexé.


    En tout cas merci à toi.

  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
    Citation Envoyé par Drizzt [Drone38] Voir le message
    Si j'avais id = property dans le iterate, il confondait les getters indexés et les non indexés et me donnait une erreur comme quoi il ne trouvait pas le getter non indexé.
    C'est pour cette raison que je t'ai dit plus haut qu'il fallait éviter les surcharges de méthode dans l'ActionForm.
    Par contre, j'ai écrit qu'il fallait changer la valeur de name et en fait, j'aurais dû écrire qu'il fallait modifier la valeur de id dans le tag logic:iterate, ce qui implique un changement de la valeur de name dans le tag html:text.

    Citation Envoyé par Drizzt [Drone38] Voir le message
    En tout cas merci à toi.
    De rien.

  5. #5
    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
    En fait, j'avais mal regardé le code de la jsp que tu as posté.

    Si tu indexes toi-même la propriété en utilisant l'EL ${i}, tu n'as pas besoin de getter indexé dans l'ActionForm mais seulement le getter et le setter sur l'ArrayList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private ArrayList<String> strValeursProfil = new ArrayList<String>();
     
    public ArrayList<String> getStrValeursProfil()
    {
    	return strValeursProfil;
    }
     
    public void setStrValeursProfil(ArrayList<String> strValeursProfil)
    {
    	this.strValeursProfil = strValeursProfil;
    }
    et dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate name="formName" property="strValeursProfil"  id="strValProfil" indexId="i" >
    <td align="center">
    	<html:text property="strValeursProfil[${i}]" size="10" maxlength="12"/>
    </logic:iterate >

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

Discussions similaires

  1. Validation formulaire avec arrayList
    Par abraxis dans le forum Struts 2
    Réponses: 0
    Dernier message: 07/08/2014, 11h25
  2. Réponses: 6
    Dernier message: 31/03/2010, 00h09
  3. formulaire passage d'un arraylist
    Par florianjoy54 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/01/2010, 14h15
  4. Réponses: 5
    Dernier message: 30/05/2007, 15h04

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