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] Comment utiliser nested:radio dans un nested:iterate ?


Sujet :

Struts 1 Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Struts 1.1] Comment utiliser nested:radio dans un nested:iterate ?
    Bonjour à tous,

    J'ai un problème avec l'utilisation du tag nested:radio dans un tag nested:iterate.
    Je vous explique : j'ai un objet "attributes" qui a pour propriété "String selectedValue", et "ArrayList valueList"
    L'objet valueList a pour propriété "String label"

    Avec ceci, je construit un formulaire de cette façon là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <nested:iterate property="attributes">
        <nested:iterate property="valueList">
            <nested:define id="val" property="label" type="java.lang.String"/>
            <tr>
                <td><nested:radio property="selectedValue" value="<%=val%>"/></td>
                <td><nested:write property="label"/></td>
            </tr>
        </nested:iterate>
    </nested:iterate>
    J'obtiens alors l'erreur suivante :
    javax.servlet.jsp.JspException: No getter method available for property attributes[0].valueList[0].selectedValue
    Ce qui est tout à fait normal car il essaye de récupérer la propriété "selectedValue" au niveau de l'objet "valueList" au lieu de l'objet "attribut".

    Comment faire pour lui indiquer dans quel objet aller chercher ?

    Merci beaucoup d'avance

  2. #2
    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
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <nested:iterate property="attributes" indexId="index">
        <nested:iterate property="valueList" id="itemValue">
            <tr>
                <td><nested:radio property="attributes[${index}].selectedValue" idName="itemValue" value="label"/></td>
                <td><nested:write property="label"/></td>
            </tr>
        </nested:iterate>
    </nested:iterate>
    Cette solution avec l'EL ${index} ne fonctionnera que si l'appli est définie en J2EE 1.4 (Servlet 2.4/JSP 2.0).

    Si ce n'est pas le cas, il faut utiliser une scriptlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <nested:iterate property="attributes" indexId="index">
        <nested:iterate property="valueList" id="itemValue">
            <tr>
                <td><nested:radio property='<%= "attributes[" + index +"].selectedValue" %>' idName="itemValue" value="label"/></td>
                <td><nested:write property="label"/></td>
            </tr>
        </nested:iterate>
    </nested:iterate>

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour ta réponse.

    Malheureusement, en utilisant la deuxième méthode (la première ne s'applique pas), j'obtiens l'erreur suivante :
    Error: Attribute: idName is not a valid attribute name

    J'ai adapté le code pour ne plus utiliser la propriété idName :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <nested:iterate property="attributes" indexId="index">
        <nested:iterate property="valueList" id="itemValue">
            <nested:define id="val" property="label" type="java.lang.String"/>
            <tr>
                <td><nested:radio property='<%= "attributes[" + index +"].selectedValue" %>' value="<%=val%>"/></td>
                <td><nested:write property="label"/></td>
            </tr>
        </nested:iterate>
    </nested:iterate>
    Et là, j'obtiens l'erreur suivante :
    No getter method available for property attributes[1].valueList[0].attributes[1].selectedValue
    Ce qui veut donc dire qu'il ne va pas toujours pas chercher dans le bon objet.

    Aurais tu une idée stp ? Ca m'arrangerait énormément
    Merci pour ton aide en tout cas.

  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
    Ah, désolée, je pensais que l'attribut idName existait déjà en Struts 1.1.

    Sinon, pour qu'il aille chercher dans le bon objet, il faut ajouter l'attribut name dans le tag nested:radio. Je l'avais oublié.

    Si attributes est bien une propriété du form-bean, il faut mettre le nom du form-bean dans l'attribut name comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><nested:radio name="nomDuFormBean" property='<%= "attributes[" + index +"].selectedValue" %>' value="<%=val%>"/></td>

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup une nouvelle fois pour ton aide.

    En fait mon objet attributes est un propriété d'un autre objet standardResources qui est au niveau de mon form-bean. J'ai donc adapté et avec cette solution, le getter fonctionne bien , par contre le setter ... non

    J'ai donc mis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <nested:hidden property="selectedValue"/>
    avant le dernier iterate dont la valeur est assigné par une fonction javascript lors d'un clic sur un nested:radio.

    Ca donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <nested:iterate property="attributes" indexId="index">
        <nested:hidden property="selectedValue" styleId='<%= "standardResources[" + index_res + "].attributes[" + index_att +"].selectedValue" %>'/>
        <nested:iterate property="valueList" id="itemValue">
            <nested:define id="val" property="label" type="java.lang.String"/>
            <tr>
                <td><nested:radio name="formForm" property='<%= "standardResources[" + index_res + "].attributes[" + index_att +"].selectedValue" %>' value="<%=val%>" onclick="javascript:document.getElementById(this.name).value=this.value"/></td>
                <td><nested:write property="label"/></td>
            </tr>
        </nested:iterate>
    </nested:iterate>
    C'est pas très beau, mais ça marche ! Je vais donc mettre "résolu"
    Mais si t'as mieux, je suis preneur

    Merci vraiment pour ton aide, c'était très sympa

  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
    C'est surprenant.
    Normalement, en indexant les propriétés dans l'attribut property, la mise à jour devrait se faire sans problème, et ce sans avoir à passer par une fonction javascript et un champ hidden.

    Peux-tu préciser de quels types sont les objets standardResources et attributes ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Tu viens une nouvelle fois de m'aider énormément.

    En fait, j'étais tellement convaincu que la solution passerait forcément par un nested:hidden, que je l'avais inséré dans le code avant de tester ta solution.
    Du coup, forcément, il me pourrissait le setter du radio button :-)
    En l'enlevant, ça marche parfaitement

    Mille merci, et bonne journée

  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
    De rien.

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

Discussions similaires

  1. Comment utiliser le ping dans un prog
    Par debutant-1 dans le forum Linux
    Réponses: 2
    Dernier message: 23/06/2006, 10h09
  2. Réponses: 4
    Dernier message: 16/02/2006, 16h28
  3. Réponses: 1
    Dernier message: 09/02/2006, 16h59
  4. Réponses: 7
    Dernier message: 25/11/2005, 17h11
  5. [C#]Comment utiliser un dataset dans plusieurs...
    Par Sonny dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/11/2005, 14h03

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