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:collection et checkbox


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 50
    Points
    50
    Par défaut [Struts-Layout] layout:collection et checkbox
    Salut à tous,

    j'essaie actuellement d'utiliser struts-layout et plus particulièrement les checkbox qu'il est possible d'intégrer avec le tag collection de cette bibliothèque.

    Je me suis donc basé sur l'exemple proposé sur le site officiel de struts-layout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         Now, we want to be able to select multiple users. When we submit the form, the ids parameter contains the logins of the selected user. The ids property should be an indexed property in the struts bean form.
     
        ...
        <layout:collection name="users" styleClass="ARRAY" selectName="ids" selectProperty="login" selectType="checkbox">
        	<layout:collectionItem title="users.login" property="login"/>
        	<layout:collectionItem title="users.firstname" property="firstname"/> 
        	<layout:collectionItem title="users.lastname" property="lastname"/>
        	<layout:collectionItem title="users.society" property="society"/> 
        </layout:collection>
        ...
    Visible ici : http://struts.application-servers.co...ultiple-select

    Or je ne sais pas à quoi doit ressembler la propriété indexée ids dont il est question. J'ai pour l'instant ajouté un Vector à mon bean du formulaire, censé contenir les IDs cochés et ajoutant les méthodes classiques des propriétés indexées telles qu'un getter avec index et un setter avec index et objet à ajouter mais au chargement du formulaire il semble que le getter soit appelé alors que le Vector n'est pas initialisé.

    Je pensais que le Vector était créé et renseigné lors de l'envoi du formulaire et non pas au chargement.

    Comment faut-il déclarer cette propriété indexée?

  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 avec un tableau de String en n'oubliant pas de l'initialiser dans l'ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        private String[] ids= new String[10];

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Hélas, j'aimerais justement ne pas l'initialiser à une valeur fixe, y-a-t-il possibilité de faire cela? Ou alors cette solution n'est pas la meilleure pour séléctionner des objets dans des listes?

  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
    Dans l'Action dans laquellle tu constitues la collection users, tu pourrais faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] ids= new String[users.size()];
    taForm.setIds(ids) ;
    et dans l'ActionForm :
    et getter et setter bien sûr.

    A tester.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    C'est une possibilité, mais dans mon cas il est impossible de connaître la taille à l'avance sans réexécuter la requête qui permet l'affichage du formulaire, or cela me paraît être inutile. N'est-il pas possible de rendre la propriété indexée dynamique?

  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
    J'avoue que je ne comprends pas bien.

    Lorsque tu constitues la collection users, dans l'Action qui s'exécute avant l'affichage du formulaire, tu connais obligatoirement la taille de la collection via la méthode users.size().
    Et donc, tu connais ainsi le nombre maximum de logins qu'il est possible de sélecter. La solution que je t'ai donné devrait donc fonctionner non ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Justement moi non je crois ne pas bien comprendre

    Tu me proposes d'initialiser le formulaire dans l'action qui s'exécute avant l'affichage du formulaire, mais en fait, comment faire cela? Le formulaire n'existe pas avant son affichage? Est-il possible de le récupérer?

  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
    Mais actuellement, où constitues-tu la collection users ? dans une Action qui s'exécute avant l'affichage de la jsp contenant le formulaire non ?

    Donc, si c'est bien le cas, il suffit d'ajouter name="nomDeTonFormBean" dans le mapping de cette Action avec un validate="false" dans le struts-config.xml.

    Admettons que l'Action qui initialise le formulaire s'appelle InitAction et l'Action qui s'exécute au submit du formulaire s'appelle ProcessAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <action path="/initAction" type="tonPackage.InitAction" name="nomDeTonFormBean"
           scope="request" validate="false">
       <forward name="success" path="/uneJsp.jsp"/>
    </action>
    <action path="/processAction" type="tonPackage.ProcessAction" name="nomDeTonFormBean"
            scope="request" validate="true" input="/uneJsp.jsp">
       <forward name="success" path="/uneAutreJsp.jsp"/>
    </action>
    Et dans la méthode execute de l'Action InitAction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TonActionForm tonActionForm = (TonActionForm) form ;
    String[] ids= new String[users.size()];
    tonActionForm.setIds(ids) ;
    Tu peux d'ailleurs de la même façon initialiser ton formulaire avec la collection users plutôt que de faire un setAttribute (ce que tu dois faire actuellement non ?) et ça donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonActionForm.setUsers(users) ;
    et dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <layout:form action="processAction">
      <layout:collection property="users" ...>
         ...
      </layout:collection>
    </layout:form>

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Effectivement je n'y avait pas pensé

    Mais en y réfléchissant bien, pourquoi ne pas le faire dans la fonction reset de mon formulaire??

  10. #10
    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
    Ce n'est pas comme ça que je procède mais c'est une possibilité.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 50
    Points
    50
    Par défaut
    Ce n'est pas une bonne façon de faire?

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/06/2010, 17h39
  2. [Struts:Layout] collection de checkbox
    Par Roievil dans le forum Struts 1
    Réponses: 10
    Dernier message: 26/01/2009, 16h50
  3. [Struts-Layout] collection et checkbox
    Par khayri dans le forum Struts 1
    Réponses: 14
    Dernier message: 03/05/2007, 12h19
  4. struts layout Deux collection: l'une dépend de l'autre
    Par kamaldev dans le forum Struts 1
    Réponses: 9
    Dernier message: 01/08/2006, 23h02
  5. [Struts] Struts-Layout/layout:collection
    Par dehbi dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/04/2006, 14h06

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