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 :

Affichage Formulaire : Collections


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut Affichage Formulaire : Collections
    Bonjour,

    J'ai un petit souci avec Struts et je ne trouve aucune réponse nul part...
    En fait je suis bloqué a l'affichage d'un collections dont chaque élement possède une collection...

    J'ai un ActionForm qui contient des paramètres simple ainsi qu'une collection de Type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private String id;
    	private Integer filter;
    	private Set<Type> types;
    ...
    J'affiche facilement l'id ainsi que le filtre sélectionné parmis l'ensemble des filtres disponibles.

    Chaque type a des paramètres simple ainsi qu'une collection d'états :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Type {
     
    	private int id;
    	private String name;
    	private State startState;
    	private State endState;
    	private int delay;
    	private String unit;
    	private Set<State> states;
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class State {
     
    	private String id;
    	private String name;
    	private String step;
    	private boolean cs;
    ...
    Mon objectif est d'afficher un tableau de types (1 ligne par type) en dessous de des choix de filtres et autres :


    Start est la valeur de startState parmis l'ensemble des states du type
    End est la valeur de endState parmis l'ensemble des states du type
    States est l'ensemble des states du type accompagné d'un checkbox qui correspond au boolean cs

    Est-il possible de le faire ? Si oui comment
    Cela fait quelques jours que je suis dessus et n'y arrive pas du tout

    Merci à celles et ceux qui pourront me donner un coup de pouce

  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 pouvoir mettre à jour une sous-liste, il faut indexer toi-même les propriétés.
    Il faut donc remplacer les Set par des List car les Set n'ont pas de getter indexé.

    Dans la jsp, il faudrait coder quelque chose du style :
    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
    29
    30
    31
    32
    33
    <table border="1">
     
    <nested:iterate property="types" id="type" indexId="idType">
    <tr>
    	<td><nested:write property="name"/></td>
    	<td>
      	   <nested:select property="startState.id">
    		<nested:optionsCollection property="states" value="id" label="name"/>
    	   </nested:select>
    	</td>
    	<td>
    	   <nested:select property="endState.id">
    		<nested:optionsCollection property="states" value="id" label="name"/>
    	   </nested:select>
    	</td>
    	<td><nested:text property="delay"/></td>
    	<td>
    	   <table>
    	      <nested:iterate property="states" id="state" indexId="idState">
    	         <tr>
    		    <td>
    			<html:checkbox name="nomDuFormBean" property="types[${idType}].states[${idState}].cs">
           			   <bean:write name="state" property="name"/>
    			</html:checkbox>
         		    </td>
    		 </tr>
    	      </nested:iterate>
    	   </table>
    	</td>
    </tr>
    </nested:iterate>
     
    </table>

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    Merci pour cette réponse

    J'ai encore un souci car il n'y a une exception lors de l'accès au un state pour le checkbox :

    javax.servlet.ServletException: Invalid argument looking up property: "types[${idType}].states[${idState}].cs" of bean: "testForm"
    J'ai utilisé le même bean que celui que j'utilise pour le reste du formulaire... normal

    Je sais pas trop comment régler ce problème, ce sont peut être les ${} qui sont mal pris en compte ?

    Sinon dans mon Action je récupérerai toutes les valeurs modifiée directement dans mon bean ou faudra t'il faire un traitement spécifique (je pense aux checkbox)

  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
    Les EL ne sont pas interprétées.

    Tu peux utiliser la tld struts-html-el.tld à la place de struts-html.tld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html-el:checkbox name="nomDuFormBean" property="types[${idType}].states[${idState}].cs">
       <bean:write name="state" property="name"/>
    </html-el:checkbox>
    sans oublier d'ajouter au début de la jsp la directive taglib qui pointe sur cette tld.

    Normalement, via cette méthode, l'objet sera directement mis à jour.

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    En effet c'est tout de suite mieux

    En tout cas, un grand merci car je sors la tête de l'eau enfin !!
    J'espere que ce sera par trop dur de sauvegarder et mettre a jour avec tout ca...

    Je te tiens au courant sur ce topic dans l'apres midi ou demain

  6. #6
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    (doublon à supprimer)

  7. #7
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    Les principaux problèmes liés à la sauvegarde :

    1. startState et endState[
    2. checkbox


    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <nested:select property="startState.id" errorStyleClass="CSError">
       <nested:optionsCollection property="states" value="id" label="name"/>
    </nested:select>
    Je modifie l'id du l'etat de départ au lieu de modifier la référence vers l'etat de départ. En mettant seulement startState en property ca ne marche pas forcément

    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:checkbox name="testForm" property="types[${idType}].states[${idState}].cs">
       <bean:write name="state" property="name"/>
    </html:checkbox>
    Je récupère la bonne valeur quand le checkbox passe de
    • true à true
    • false à true
    • false à false

    mais pas qd il passe de
    • true à false


    Les checkbox semblent ne pas retourner les éléments non cochés...
    Quelle est la meilleures façon et où enregistrer ces éléments ?

    Je reflechis à une solution mais le plus dur est d'en fait rester dans le form bean afin de garder les informations enregistrées quelque part en cas d'erreur (ce serait dommage que l'on perde tout le tableau si on a oublié de renseigner un champ...)

Discussions similaires

  1. [2.x] probleme d'affichage de collection dans un formulaire
    Par rafleboss dans le forum Symfony
    Réponses: 12
    Dernier message: 05/08/2011, 08h11
  2. affichage formulaire
    Par legsfr dans le forum IHM
    Réponses: 2
    Dernier message: 19/01/2007, 10h58
  3. [WinForms]Lenteur d'affichage formulaire avec image de fond
    Par olixelle dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 06/09/2006, 14h06
  4. Problème d'affichage de Collection
    Par youdev dans le forum Hibernate
    Réponses: 7
    Dernier message: 28/07/2006, 12h22
  5. Pb affichage formulaire dans balise div
    Par zut94 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/07/2006, 10h19

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