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][html:optionsCollection] récupération des données


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut [struts][html:optionsCollection] récupération des données
    bonjour,

    j'ai un formulaire dans lequel j'ai mis un champ select avec dedans un optionsCollection. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <html:form action="/users/setRoles.do" method="post">
    	<html:select styleId="rolesLst" property="rolesLst" multiple="true" size="4">
    		<html:optionsCollection property="rolesLst"/>
    	</html:select>
    	<html:submit value="Submit" property="Submit"/>
    </html:form>
    dans mon action form j'ai un getter et un setter qui gerent des collections :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public Collection getRolesLst() {
        return rolesLst;
      }
     
      public void setRolesLst(Collection rolesLst) {
        this.rolesLst = rolesLst;
      }
    Quand dans mon action j'initialise mon formulaire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Collection cl =new ArrayList() ;
      Collection c = admin.roleGetAll();
      Iterator i = c.iterator();
      String s = new String();
      while (i.hasNext()) {
        s = ( (TOrcRolesDto) i.next()).getIdRole();
        cl.add(new OptionsCollectionElement(s,s));
       }
       form.setRolesLst(cl);
    L'objet OptionsCollectionElement est une classe qui herite de LabelValueBean

    Tout ceci fonctionne correctement, mes donnees s'affichent dans ma liste.

    Par contre, je n'arrive pas a recuperer ce qu'il y a dans ma liste apres le submit

    si je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Collection c = form.getRolesLst();
    avec un cast sur mon formulaire, il me renvoie null dans c...

    Est ce que quelqu'un saurait ce que je fais de mal ? ou plutot ce que je ne fais pas pour recuperer ma liste ?

  2. #2
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 366
    Points
    1 366
    Par défaut
    Dans tes tags commence par présicer le nom du bean ds l'attribut name.


    @+

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    En fait, ce que je souhaite faire c'est recuperer tous les elements qui sont dans la liste, pas seulement ceux qui sont selectionnes.

    en fait, si je clique sur le submit de mon form, il y a deux cas :
    1 - si je n'ai rien selectionne, j'ai un NullPointeurException qd je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collection c = form.getRolesLst();
    2 - si je selectionne un element ou plusieurs, j'ai une autre exception
    java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
    at org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
    at org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
    at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
    at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
    en ce qui concerne le fait de rajouter le nom du bean dans les tags, de quels tags parles tu ? select ? optionsCollection ?
    Je pensais qu'en lui disant dans le struts-config quel formulaire utiliser, il l'utilisait sans pb. D'aillieur, j'arrive a remplir le select avec les attributs que j'ai mis dans le Form....

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Ca n'est pas un pb de scope ???

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    je ne pense pas que ce soit un probleme de scope....
    Je pense que c'est plutot un probleme de programmation. Un probleme peut etre au niveau du tag <optionsCollection> que je n'utilise pas comme il faut.
    J'ai un peu de mal a savoir a quoi correspond "label" et "name"
    Je ne suis pas sur d'utiliser le tag comme il faut. Ce que je trouve bizare c'est que j'arrive a remplir la list ....

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Dans le code que tu as écrit tu demandes bien de stocker le résultat dans la liste de départ => tu écrases le contenu de ta liste de départ avec les valeurs sélectionnées.

    Tu devrais créer un autre champs pour récupérer les valeurs sélectionnées !

  7. #7
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 366
    Points
    1 366
    Par défaut
    Ce que tu veux setter c pas roleLst c un role ds roleLst...

    Donc il te faut un champ qui récupere le role.

    Ensuite pour le passage de la liste, il y a plusieurs moyen, soit dans l'actionFOrm, soit ds la session, soit ds le contexte, ....

    du moment que t'as le bon scope...

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    >djoukit : oui c'est ca

    >RandomX : du coup ce n'est pas ca

    Je vais essayer d'etre un peu plus precis
    En fait dans ma jsp j'ai 2 listes, et j'ai des boutons qui actionnent des function javascript pour passer des elements d'une liste a l'autre. Ce qui m'interesse de recuperer apres le submit, c'est le contenue complet d'une de ces 2 listes.... dc tout le contenue de roleLst et pas seulement un role dans cette liste
    Ensuite RanDomX tu me parles de passages, en fait, ce que je cherche c'est de recuperer la liste sans passer par la session ou autre, mais par l'ActionForm, comme je fais pour remplir mes listes. Dans mon struts-config.xml j'ai defini l'action en lui disant qu'elle utilisait mon formulaire.

    J'espere que c'est plus clair comme ca et que vous avez des idees pour m'aider.

    Merci

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Est ce qu'il y aurait quelqu'un sur le forum qui saurait utiliser correctement le tag <html:optionsCollection> de Struts :

    Je pense que mon probleme vient d'une mauvaise utilisation de ce dernier...

    Merci d'avance.

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Pour ceux que ca interesse, voila comment j'ai resolu mon probleme... Je ne pense pas que ce soit la meillieure solution, en tout cas c'est la seule que j'ai trouvee :

    dans ma jsp, j'ai ecrit une fontion javascript qui recupere tous mes element de la liste, qui les met dans un chaine de caractere separes par des ",", enfin qui met cette chaine de caractere dans un parametre de l'url de l'action. Je sais, c'est assez tordu :cfouf:

    Voila ce que ca donne niveau code :

    le code javascript :

    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
    function returnSelected() {
    	var form = document.forms[0];
    	result="";
    	nbLignes=form.elements['userRolesList'].length;
    	compteur=0;
    	while (compteur<nbLignes)
    	{
    		if (result == "")
    		result=form.elements['userRolesList'].options[compteur].value;
    		else
    		result=result + "," + form.elements['userRolesList'].options[compteur].value;
    		compteur++;
    	}
    	var url = "setRoles.do?selectedRolesList=";
    	url+= result ;
    	form.action = url;
    	form.submit();
    }
    ce code est appelle par un bouton de type button (apparement un bouton est par defaut dans un formulaire de type submit) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <button type="button" onclick="returnSelected()">Submit</button>
    Ensuite, dans mon action Struts, je n'ai plus qu'a recuperer le parametre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getParameter("selectedRolesList")
    Voila

    Par contre, si quelqu'un trouve une meillieure solution, je reste prenneur

  11. #11
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 366
    Points
    1 366
    Par défaut
    POur ce qui est du passage de param d'une liste a l'autre ou de liste contextuelle, inspire toi de ce qui est fait ds la FAQ Struts.

    POur ce qui est du passage de la liste, j'ai pas le temps de t'expliquer, mais c un pb conceptuel que tu as... Tu n'as pas 50 manière de transferrer l'objet....


    @*+

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Pour le passage d'elements d'une liste a l'autre je n'ai pas de problemes. J'ai des actions javascript qui s'en chargent et ca fonctionne tres bien.

    Pour ce qui est du passage de la liste, s'il n'y a pas 50 manieres, est ce que cela veut dire que celle que j'utilise est la bonne : ou il n'y en a pas 50 mais au moins 2 dont la mienne qui n'est pas top
    : :

  13. #13
    Membre régulier Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 104
    Points
    104
    Par défaut
    Bonjour,

    Je me permets d'ajouter ma petite contribution à ce topic, car j'ai eu le même problème.

    Le probleme vient du fait qu'une listBox est faite pour récupérer des éléments sélectionnés (attributs multiple = true).
    Par défaut, elle ne ramène pas l'ensemble des options sélectionnées.

    J'ai "zappé" cet ennui en ajoutant sur le bouton submit une fonction "Focus", qui se positionne sur ma liste, et passe chaque option de la liste à "selected". Ainsi, je récupère bien tous les éléments présents dans cette liste.

    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
     
    // Select all elements from liste "listEltsSelect"
     
    function selectAllElts ( listEltsSelect ) {
     
    listEltsSelect.focus();
     
    if (listEltsSelect.length != 0) {
      for( i = 0; i < listEltsSelect.options.length; i++ ) 
      {
        listEltsSelect.options[i].selected = true ;
      }
     } else {
     	// Ajout d'une option "invisible" permettant de détecter la nullité de la liste.
     	listEltsSelect [0] = new Option( " ", "empty" , false , true );
     
     	}
     
     
    }

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

Discussions similaires

  1. [Struts]HTML:FORM ET HTML:HIDDEN
    Par zurich dans le forum Struts 1
    Réponses: 6
    Dernier message: 08/02/2005, 00h30
  2. Réponses: 10
    Dernier message: 27/08/2004, 12h55
  3. html:optionsCollection selected
    Par babylone7 dans le forum Struts 1
    Réponses: 8
    Dernier message: 02/08/2004, 15h34
  4. [Struts]<html:errors/> request
    Par Eydoll dans le forum Struts 1
    Réponses: 5
    Dernier message: 28/07/2004, 15h14
  5. [débutant][struts]html:options
    Par GreenJay dans le forum Struts 1
    Réponses: 5
    Dernier message: 24/05/2004, 15h04

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