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

  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 : 41
    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 : 41
    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  

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Oui ca sera p'etre mieux. Et si tu peux mettre du code meme elaguer pour que je test sur mon post ca ira surement bcp plus vite. Sinon tu peux aussi me les envoyé sur ma boite mail si tu ne veux pas que tout traine sur le forum. (Mail sur le profil si tu veux).

    Mais toute facon la il est l'heure de partir pour moi ;-). Donc j'y jetterais un oeil demain matin vers 7h30 quand j'arrive.

  8. #8
    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
    La solution de maxf1 me semble bonne mais ne peut fonctionner qu'en J2EE 1.4.

    Si tu es en J2EE 1.3, il faut utiliser la tld struts-html-el.tld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:radio idName="DomaineValeur[${countop}]" name="DomaineValeur" property="identifiant" value="identifiant">

  9. #9
    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
    je suis en j2ee 1.4 pourtant!!
    j'ai testé avec le html-el radio, j'ai la même erreur!!

    Cannot find bean under name DomaineValeur[0]!!
    Il ne trouve encore une fois pas le bean, vu qu'en rajoutant le countop, on change son nom et donc il ne reconnaît plus DomaineValeur!

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Bon allez voici ma soluc:

    Chez moi ca passe (j'espere avoir reproduit le meme mode fonctionnement que chez toi avec tes quelques explication).

    A savoir que chez moi j'afficher tout mes Theme avec a chaque fois toute mes optionsDetail avec à coté mé DomaineValeur.

    !!!!!!!!! Si tu n'affiche pas tous les themes mais seuleument 1 tu peux virer ce que j'ai mis en gras!!!!!!!!!!!

    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
    <logic:iterate id="Theme" name="formCreerProfil" property="lesDomainesTh" indexId="indTheme">
    	<tr>
    	   <td>
    	      <h3>
    		<b> <bean:write name="Theme" property="libelle" /> </b>
    	      </h3>
    	   </td>
    	</tr>
    	<!-- on affiche loption-->
    	   <logic:iterate id="OptionDetail" name="Theme" property="lesOptionsDetails" indexId="indDetail">
    	    <tr>
    	      <td width="400">
    		<bean:write name="OptionDetail" property="libelle" />
    	      </td>
    	    </tr>
    	<!-- on affiche les radios boutons en fonction de loptionDetail en cours-->
    	<tr>
    	    <logic:iterate id="DomaineValeur" name="OptionDetail" property="listeDomaineValeur" type="monpackage.DomaineValeur">
    		<td width="120">
                            <html:radio name="DomaineValeur" property="identifiant(${indTheme},${indDetail})" value="identifiant">
                            <bean:write name="DomaineValeur" property="libelle" />	</html:radio>
    		</td>
    
    	</logic:iterate>
    	</tr>
    	</logic:iterate>
    
    </logic:iterate>

    J'ai juste testé l'affichage, ca faisait deja pas mal de boulot après la récuperation ca doit passer mais pas tester parce que j'ai deja mis pas mal de temps à faire toutes les classes de test

  11. #11
    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
    ok Merci Beaucoup! je vais tester tout ca

    Quand le probleme des name fonctionnera, tu confirmes que je devrais utiliser une hashtable ou hashMap pour recuperer les valeurs choisies par le user?

    A partir de ce que je t'ai donné précédemment, tu as constaté que je fais un "set"(provenant de ma classe form) d'une collection(lesDomainesTh), dans mon Action ,contenant elle même 3 collections(lesThemes, lesOptionsDetails, listeDomaineValeur). Et pour les afficher dans ma jsp, je pioche dans mes beans métiers,exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <logic:iterate id="DomaineValeur" name="OptionDetail" property="listeDomaineValeur">
    ici je pioche dans optionDetail, pour afficher, les domaineValeurs correspondant à chacun(mapping hibernate du modele de données)

    Est-ce-que ca ne va pas poser un probleme pour recuperer le choix de l'utilisateur pour chaque optionDetail et l'inserer dans la base?

    Je ne sais pas si je me fais bien comprendre mais ce que je veux dire, c'est que, lorsque la personne va cliquer sur enregistrer, ou bien change d'onglet, je dois récuperer ces choix, mais dans mon CreerProfilAction, je ne pourrai pas faire un "formulaire.getListeDomaineValeur", puisque ce n'est pas cette liste que j'ai envoyé; Ce que j'ai envoyé c'est formulaire.setLesDomainesTh()
    Bref le but c'est quand même de récuperer l'optionDetail et le choix de l'utilisateur pour chaque, crois tu cela possible avec une Hashmap?

    Edit apres test:
    au début il interpretait pas les $inDetail, j'ai ensuite utilisé les html-el:radio
    et là youpla boum ca marche.
    Mais le soucis c'est que l'orsque j'arrive sur la page pour la premeire fois comme je n'ai pas affecté de valeurs par defaut a mes radios boutons,ils sont vierges, c'est moi qui suis obligé de cliquer dessus pour les faire apparaître, mais bon au moins les name c'est bon mais maintenant faut arriver a recuperer les valeurs lors d'une création et les reafecter lors d'une modification de profil, c'est la question que j'avais posé en premier post, je pense que c'est un hashMap ou hashable

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    En faite dans ton object domaineValeur, il te faudrait un

    avec les setters et getter qui faut bien.
    Et de mettre value="value". Bien sur il faudrait que tu initialises toujours le premier ou le dernier des radio buttons d'un optionDetail (en mettant la value à true dans ton bean).


    Après le choix de la HashMap je sais pas en faite faudrait voir comment tu fais après. Si tu recuperes toutes les valeurs pour tous les themes ou juste les valeurs pour un Theme. Si ton theme est identifier, vi un id, tu peut tout aussi bien recuperer sa liste dans l'arraylist.

    Pour le tag html-el:radio c'est normal si tu n'es pas en 1.4 comme moi,

  13. #13
    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
    ok merci, je crois ca va être tendu pour recuperer mes valeurs.
    sinon toi tu travailles en SSII aussi?

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Oui ca risque d'etre un p'tit peu plus compliquer qu'un simple champs String, quoi que si jamais ca ne marche pas une bonne petite methode bien ecrite peut faire des malheurs, lol!

    Oui aussi en SSII, faut bien gagner sa croutte, lol!

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