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 :

html:radio ont même name (pour les pros de struts) ou les pros tout court


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut html:radio ont même name (pour les pros de struts) ou les pros tout court
    bonjour,
    je fais une appli qui affiche des radios boutons dynamiquement, en fonction d'option detail, c'est-à-dire:

    libelle Optiondetail n°1 ->radio bouton choix, 1 radio bouton choix 2
    libelle Optiondetail n°2 ->radio bouton choix 1, radio bouton choix 2
    libelle Optiondetail n°3 ->radio bouton choix 1, radio bouton choix 2

    Pour cela -->j'itere sur chaque optionDetail, dont j'affiche le libelle comme ci-dessus, puis en face de chacune d'elle , on aura des radio boutons à checker(forcément 1 choix à chaque fois).

    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
     
     
    <!--on affiche loption detail-->
    <logic:iterate id="OptionDetail" name="Theme" property="lesOptionsDetails" indexId="countop">
      <tr>
          <td width="500">
              <bean:write name="OptionDetail" property="libelle"/></td>      
     
                      <!-- on affiche les radios boutons en fonction de loptionDetail en cours-->
     
                 <logic:iterate id="DomaineValeur" name="OptionDetail" property="listeDomaineValeur" >
     
             <td width="150">
                   <html:radio idName="DomaineValeur" indexed="true" name="DomaineValeur" property="identifiant" value="identifiant">
     
                        <bean:write name="DomaineValeur" property="libelle"/>
                    </html:radio>
                </td>
     
           </logic:iterate>
     
        </tr>
    </logic:iterate>
    Quand je run ce code, le fait d'avoir mis indexed="true" a comme conséquence de prendre comme numerotation, le logic:iterate précédent (ici celui de domaineValeur), or comme vous le constatez dans le resultat du code source, c'est FAUX!!!!!:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input type="radio" name="DomaineValeur[0].identifiant" value="identifiant">Non</td>
     
     <input type="radio" name="DomaineValeur[1].identifiant" value="identifiant">Oui</td>
    On constate que les numero sont 0 et 1, et c'est logique!! mais ca me pose un gros probleme, puisqu'ils sont differents, l'utilisateur pourra checker les 2 et ca, c'est bad!

    Donc je voudrais savoir comment faire pour qu'il prenne en compte le logic iterate optionDetail, qui lui m'affichera les bons nombre entre crochet.
    c'est-à-dire

    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <input type="radio" name="DomaineValeur[0].identifiant" value="identifiant">Non</td>
     
     <input type="radio" name="DomaineValeur[0].identifiant" value="identifiant">Oui</td>
     
     
    <input type="radio" name="DomaineValeur[1].identifiant" value="identifiant">Non</td>
     
     <input type="radio" name="DomaineValeur[1].identifiant" value="identifiant">Oui</td>
    Ici c'est bon!!, puisqu'à chaque iteration d'une optionDetail, on affiche les nouveau radios boutons avec les mêmes valeur(0,0 et 1,1).

    Ce qu'il faut comprendre c'est que si je me base sur le logic:iterate des domaine(radio boutons), l'iteration reviendra a 0 des qu'il aura finit d'afficher les radiosboutons pour telle optionDetail, et cela a comme conséquence d'avoir les même valeurs de radio boutons pour des options differentes et c'est faux!!
    Je dois donc me baser sur mes OptionsDetails qui elles, iterent sans jamais revenir à 0.


    Je sais pas si je suis tres clair, mais j'ai constaté que des questions similaires ont déja été posté et sont resté sans réponse concrete.
    Y a t-il quelqun qui a reussi a gerer ce probleme???

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    OK je réponds donc à ton probleme. Tout d'abord tu peux enlever le indexed="true" car ce n'est pas ce que tu veux, ;-)


    Sinon c'est p'etre un ptit peu barbare comme ca à voir mais essaye :

    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
    <!--on affiche loption detail-->
    <logic:iterate id="OptionDetail" name="Theme" property="lesOptionsDetails" indexId="countop">
      <tr>
          <td width="500">
              <bean:write name="OptionDetail" property="libelle"/></td>      
     
                      <!-- on affiche les radios boutons en fonction de loptionDetail en cours-->
     
                 <logic:iterate id="DomaineValeur" name="OptionDetail" property="listeDomaineValeur" >
                            <bean:define id="dv${countop}" name="DomaineValeur" />
             <td width="150">
                   <html:radio idName="dv${countop}" name="dv${countop}" property="identifiant" value="identifiant">
     
                        <bean:write name="dv${countop}" property="libelle"/>
                    </html:radio>
                </td>
     
           </logic:iterate>
     
        </tr>
    </logic:iterate>

    Voilà j'espere que j'ai pas fait de boulette parce que je l'ai fait à la volé.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    Déja je suis content d'avoir réussi à me faire comrendre car c'est pas simple à expliquer!
    malheureseuement ya erreur à la compilation sur
    <bean:define id="DomaineValeur${countop}" name="DomaineValeur"/>
    il n'aime pas cette ligne, j'ai le droit à un expected,!

    En le retirant de la jsp je compile ca marche, je run et j'ai une erreur sur
    le name:Cannot find bean under name DomaineValeur${countop}

    es-tu certain qu'il faut mettre ${countop} derreire le nom du bean? Si on fait ca, il ne saura plus de quel bean on parle non?
    On est bien d'accord que name, c'est le nom du bean ou on va chercher les infos?

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    Apperemment ta solution est fausse, je crois qu'il faudrait utiliser l'objet Hashtable dans ma classe form, le probleme est comme vous pouvez le constater, je récupere mes valeurs a partir de mes beans metiers Theme et OptionDetail , je ne les recuepre pas de mon formulaire.

    En fait dans le form j'ai une collection contenant 3 collections et ces collections sont:
    -theme
    -optiondetail
    -listedomainevaleur

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Euh et en essayant ca :

    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
    <!--on affiche loption detail-->
    <logic:iterate id="OptionDetail" name="Theme" property="lesOptionsDetails" indexId="countop">
      <tr>
          <td width="500">
              <bean:write name="OptionDetail" property="libelle"/></td>      
     
                      <!-- on affiche les radios boutons en fonction de loptionDetail en cours-->
     
                 <logic:iterate id="DomaineValeur" name="OptionDetail" property="listeDomaineValeur" >
                   <td width="150">
                   <html:radio idName="DomaineValeur[${countop}]" name="DomaineValeur" property="identifiant" value="identifiant">
     
                        <bean:write name="DomaineValeur" property="libelle"/>
                    </html:radio>
                </td>
     
           </logic:iterate>
     
        </tr>
    </logic:iterate>

    La si ca marche pas faut bien m'expliquer ce qui se passe et le html généré car quand on voit pas c'est un peu embetant. Sinon faut que tu mette le code necessaire pour que je puisse tester

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    A la compilation pas d'erreur mais au run, il m'affiche big erreur dont voici un extrait(Cannot find bean under name DomaineValeur[${countop}]'!!) en effet en rajoutant la valeur de countop, le nom du bean change et il ne sait plus de quel bean on parle.
    Pfiiou ca fait 4 jours que je bloque!! on va repartir de zero , je vais t'expliquer et te montrer un screenshot de ce que ca affiche, avec un extrait de mon action !

    voila j'ai mis le screen pour te montrer comment se présente la page!

    Maintenant le code de mon action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     ArrayList lesDomainesTh=profilService.getLesDomaines();
     
                       //on transmet tout au formulaire
                       formulaire.setLesDomainesTh(lesDomainesTh);
    lesDomainesTh contient en fait 3 collections, je m'explique:
    Grâce à l'usage de la méthode getLesDomaines(), cela va chercher en base tout les themes. En fonction de chaque Theme , on a des OptionsDetails et en fonction de chaque OptionDetail, on a des DomainesValeurs.

    Il ya donc 3 collection à l'interieur de "lesDomainesTh", voici le code complet de la jsp

    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
     
    <logic:iterate id="Theme" name="formCreerProfil" property="lesDomainesTh">
                    <tr>
                      <td><b><h3><bean:write name="Theme" property="libelle"/></tr></h3></b></td>                            
     
                   <!-- on affiche loption-->
                    <logic:iterate id="OptionDetail" name="Theme" property="lesOptionsDetails" indexId="countop" >
                      <tr>
                        <td width="400">
                          <bean:write name="OptionDetail" property="libelle"/></td>      
     
                      <!-- on affiche les radios boutons en fonction de loptionDetail en cours-->
     
                            <logic:iterate id="DomaineValeur" name="OptionDetail" property="listeDomaineValeur" type="com.ares.administration.bo.DomaineValeur" >          
                              <td width="120">
                                 <html:radio idName="DomaineValeur" name="DomaineValeur" property="identifiant" value="identifiant">            
                                  <bean:write name="DomaineValeur" property="libelle"/>
                                  </html:radio>
                              </td>
                              </logic:iterate>  
     
                    </tr>
                  </logic:iterate>
              </tr>
            </logic:iterate>
    j'utilise la collection globale(lesDomainesTh) au début et ensuite je pioche dans mes objets métiers pour affichers mes OptionsDetails et mes domaines
    Images attachées Images attachées  

Discussions similaires

  1. iterate avec html:radio = problème de name
    Par xoubidur dans le forum Struts 1
    Réponses: 12
    Dernier message: 27/10/2010, 15h17
  2. Réponses: 6
    Dernier message: 04/03/2007, 19h16
  3. pb pour récupérer la valeur d'un html:radio
    Par nathalie2266 dans le forum Struts 1
    Réponses: 9
    Dernier message: 12/01/2007, 10h42
  4. Réponses: 3
    Dernier message: 13/12/2006, 22h21
  5. La même ip pour tous les connecté du forum!
    Par Grand Hibou dans le forum Langage
    Réponses: 1
    Dernier message: 03/02/2006, 10h23

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