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-Layout] <layout:nestedCollection> Questions et réponses ?


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Par défaut [Struts-Layout] <layout:nestedCollection> Questions et réponses ?
    Bonjour,

    dans un formulaire j'ai besoin de poser une série de questions dont les réponses (boutons radios) peuvent être oui non ou bien plus de deux.

    voici mes beans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Question{
    	//Attributs
    	private int id;
    	private String questionLib;
    	private Vector<Answer> answers = new Vector<Answer>();
    }
    Answer {
    	//Attributs
    	private int id;
    	private String answerLib;
    	private int questionFk;
    	private String questionLib;
    	private int value;
    }
    naturellement pour chaque classe j'ai tous les getters et setters de ces attributs et ils sont bien remplis avec ce que je veux dans l'action qui précède la jsp

    dans ma jsp
    j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    			<layout:cell >
    				<bean:message key="app.rural" />
    				<layout:space />
    				<layout:collection property="allQuestions" id="allQuestions" indexId="index" align="center">
    					<layout:collectionItem property="questionLib" />
    					<layout:nestedCollection property="answers" id="answers" indexId="index1">
    					   <layout:collectionItem title="">
    					      <layout:radio key="" property="allQuestions[${index}].answers[${index1}].value" value="1" layout="false"/>
    					   </layout:collectionItem>
    					   <layout:collectionItem property="allQuestions[${index}].answers[${index1}].answerLib" />
    					</layout:nestedCollection>	
    				</layout:collection>
    			</layout:cell>
    			<layout:space />
    où allQuestions est un vecteur de Question

    deux choses ne fonctionnent pas : les radios buttons s'affichent mais ils ne sont pas reliés entre eux Et puis les answerLibs (libellés des réponses possibles) ne s'affichent pas.

    si je change "allQuestions[${index}].answers[${index1}].answerLib" pour "answerLib"

    et j'ai l'erreur suivante :

    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
     
    javax.servlet.jsp.JspException: No method to get the property answerLib of Question {
    	questionId=1
    	questionLib=Votre jardin est-il traité avec des pesticides (par exemple, produits insecticides, anti-fourmis, anti-pucerons ou fongicides)
    	answers=[Answer {
    	answerId=1
    	answerLib=Jamais
    	questionFk=1
    	questionLib=Votre jardin est-il traité avec des pesticides (par exemple, produits insecticides, anti-fourmis, anti-pucerons ou fongicides)
    	value=0
    }, Answer {
    	answerId=2
    	answerLib=Occasionnellement
    	questionFk=1
    	questionLib=Votre jardin est-il traité avec des pesticides (par exemple, produits insecticides, anti-fourmis, anti-pucerons ou fongicides)
    	value=0
    }, Answer {
    	answerId=3
    	answerLib=Régulièrement
    	questionFk=1
    	questionLib=Votre jardin est-il traité avec des pesticides (par exemple, produits insecticides, anti-fourmis, anti-pucerons ou fongicides)
    	value=0
    }]
    } (fr.mnhn.opj.bo.Question)
    je ne comprends pas, et je ne peux pas faire dans Question un getter de answerLib puisqu'il y a plusieur réponses pour une question?

    Qu'en pensez vous?

    Olivier

  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
    Pour le problème d'affichage du libellé des réponses, il faut ajouter l'attribut name dans le tag layout:collectionItem et y mettre la variable référencée dans l'attribut id du tag nested:collection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <layout:collectionItem name="answers" property="answerLib" />
    Sinon, que veux-tu dire par "les radios buttons ne sont pas reliés entre eux" ?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Par défaut
    merci ça marche,

    ce que je voulais dire c'est que prenons le cas de la première question, aucune des trois réponses n'est présélectionnée et si j'en séléctionne une autre le rond noir s'active sans se désactiver dans la réponse d'avant, en gros toutes les réponses peuvent être sélectionnées en même temps.

    je joint une copie d'écran (form.jpg)

    alors que je voudrais que dans value soit stocké soit un 1 si la réponse est activée soit le 0 qui est là par défaut...

    j'ai dans mon formulaire le code suivant qui marche bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			<layout:cell styleClass="decoCellBoard">
    				<bean:message key="app.enviro" />
    				<layout:space />
    				<%-- Parcours des situations possibles pour une planche --%>
    				<layout:collection property="enviroLibs" id="enviroLibs" indexId="index" align="center">
    				   <layout:collectionItem title="">
    				      <layout:radio key="" property="enviroLibs[${index}].value" value="1" layout="false"/>
    				   </layout:collectionItem>
    				   <layout:collectionItem property="label"/>
    				</layout:collection>
    			</layout:cell>
    d'autre part sur la copie d'écran c'est bien moche la disposition, j'ai du mal à gérer la combinaison css et struts-layout comment faire pour que les réponses soient espacées toutes du même espace et qu'elles soient en dessous des questions?

    y a t'il un endroit sur le forum qui traite de ce genre de questions et y a t'il une documentation papier que je pourrais acheter de struts-layout?

    merci beaucoup,

    Olivier
    Images attachées Images attachées  

  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
    Je comprends ce qui ne fonctionne pas.

    Mais étant donné que tu utilises des boutons radios, tu es bien d'accord que tu ne peux sélectionner qu'un seul bouton radio par question.
    Donc, la valeur sélectionnée dans le bouton radio est liée à la question.
    Tu pourrais donc ajouter une propriété value à l'objet Question et coder ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <layout:collection property="allQuestions" id="allQuestions" indexId="index" align="center">
    	<layout:collectionItem property="questionLib" />
    	<layout:nestedCollection property="answers" id="answers" indexId="index1">
    	   <layout:collectionItem title="">
    	      <layout:radio key="" property="allQuestions[${index}].value" value="${answers.answerLib}" layout="false"/>
    	   </layout:collectionItem>
    	   <layout:collectionItem name="answers" property="answerLib" />
    	</layout:nestedCollection>	
    </layout:collection>
    ainsi, la propriété value de chaque objet Question de la collection allQuestions aura pour valeur le libellé de la réponse.

    EDIT : ou même mieux, vu que chaque réponse à un id, tu peux faire en sorte que la valeur renvoyée par le bouton radio sélectionné soit l'id de la réponse au lieu de son libellé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <layout:radio key="" property="allQuestions[${index}].value" value="${answers.id}" layout="false"/>

  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, dans la réponse que j'ai donné précédemment, je n'ai pas expliqué pourquoi la première solution ne fonctionne pas.
    C'est que tout simplement, pour que ça fonctionne, il faut que les boutons radio liés à une même question ait le même nom, afin que l'on puisse sélectionner qu'un seul bouton radio par question.
    Or, avec la première solution, ce n'est pas le cas.
    Du coup, on peut sélectionner plusieurs boutons radios pour une même question.

    Avec la deuxième solution, on a bien le même nom pour chaque bouton radio lié à une même question.

    Pour le vérifier, il suffit de regarder le code html généré.

  6. #6
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Par défaut
    Ok ça marche,

    merci !

    As tu une idée pour mes autres questions?

    Struts-Layout est il beaucoup utilisé? j'ai du mal à trouver des réponses à des problèmes qui se sont déjà certainement posés à d'autres !

    Olivier

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

Discussions similaires

  1. [Struts-Layout] problème <layout:number> avec IE
    Par mima_mine dans le forum Struts 1
    Réponses: 16
    Dernier message: 23/11/2008, 17h42
  2. Réponses: 14
    Dernier message: 08/04/2008, 21h05
  3. [Struts-Layout] Utilisation <layout:treeview>
    Par gamel dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/05/2007, 10h22
  4. [Struts-Layout] Tag layout:swap
    Par Nick56 dans le forum Struts 1
    Réponses: 1
    Dernier message: 06/05/2007, 15h36
  5. [Struts-Layout] 2 layout:collection imbriqués
    Par logica dans le forum Struts 1
    Réponses: 3
    Dernier message: 15/11/2006, 16h57

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