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][NESTED] et OptionCollection


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut [STRUTS][NESTED] et OptionCollection
    Bonsoir,
    voila ce que je veux faire avec les tags struts-neted:
    j'ai un formulaire "FO" qui a une propriete "PR",instance d'une classe "CL".
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class FO extends ActionForm{
          CL  PR = new CL();
     
         CL getPR() {return PR;}
          etc ...
    }
    et la classe "CL" est un bean ayant eux attributs :"cle" et "valeur".

    Dans une JSP je crée le formulaire correspondant,le champs correspondant a PO est renseigné par une combo box....dont les valeurs est stocké dans une ArrayList "LIST".Cette arrayList contient une liste d'objets de meme type que PO c'est adire de type "CL".
    avec struts - nested je parviens a afficher mle formulaire de plusieurs façon.Mais quelque soit la façon utilisé, j'ai une erreur d'introspection de bean ou je ne sais quoi qaund je SOUMETS le formulaire.
    1ere façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    <nested:select property="PR">
      		<nested:options collection="LIST"   property="cle" labelProperty="valeur"/>
     	</nested:select>
    2eme façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <nested:nest property="PR">
    	<html:select property="consultant">
      		<html:options collection="LIST"   property="cle" labelProperty="valeur"/>
     	</html:select>
    </nested:nest>
    3 eme façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <nested:root name="consultant">
    	<html:select property="PR">
      		<html:options collection="LIST"   property="cle" labelProperty="valeur"/>
     	</html:select>
    </nested:root>
    les 3 façons affichent bien le fomr avecs les valeurs dans la liste deroulante. mais ça plante en submit
    Merci de votre aide.[/code]

  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 407
    Points
    1 407
    Par défaut
    dans tes tags option ou options ajoute le type de la liste, ca aides des fois, ainsi que le type de bean.

    Remarque qu'il existe la classe LabelValuebean dans Struts qui sert a sotcker les couples clés-valeurs, je ne sais pas si ca peut te suffir....


    @+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Ni <html:select>,ni <html:options>,ni <thml:optionsCollection> ne permettentt de définier le type de quoi que soit.
    je me réfère a la doc suivante :

    http://<br /> http://jakarta.apache...#options<br />

  4. #4
    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 407
    Points
    1 407
    Par défaut
    non effectivement je pensais a la balise iterate http://jakarta.apache.org/struts/userGuide/struts-logic.html#iterate

    Tu peux me faire voir la trace stp ?

    @+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    Voila ce que me dit le serveur a la soumission du formulaire:
    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
    34
    35
    36
    37
    38
    39
    40
    41
     
    type Rapport d'exception
     
    message 
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception 
     
    javax.servlet.ServletException: BeanUtils.populate
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
     
     
    cause mère 
     
    java.lang.IllegalArgumentException: argument type mismatch
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:324)
    	org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
    	org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
    	org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
    	org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
    	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
    	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
     
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Tomcat.
    Tu sais quoi, je crois avoir compris, dans le sens de la soumission , c'est a dire lorsque je fais un

    "setMaProprieteQuiEnFaitEstUnBean(TypeBean b)",

    j'ai bien l'impression que le framework attends une chaine de caractere en parametre.

  6. #6
    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 407
    Points
    1 407
    Par défaut
    oui effectivement c pour ca que je te disais de caster le type d'argument renvoyé. Ca m'est deja arrivé et j'ai résolu le pb en définissant le type explicitement.

    Fais attention aussi dans ton bean au type d'argument attendu ds le setter.

    @+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    je crois tres bien comprendre ce que tu me dis d'aillerus dans la trace on a bien un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    argument type mismatch
    Mais... je caste ou? dans la page? dans la classe qui etend ActionForm?..je vois pas trop...
    tu dis:

    "avoir résolu le probleme en definissant le type explicitement"

    mais ou?

  8. #8
    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 407
    Points
    1 407
    Par défaut
    ok , donc essais de mettre ds la balise nested le nom du bean source.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <nested:nest property="PR" name="monbeanquicontientPR">
    Je sais pas si ca marche ,j'ai pas d'environnement pour tester la.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    non ça ne marche pas. c'est meme pas conforme avec la TLD....

    je pense que le pbme est un bug de la balise ..comme un probleme de communication entre la balise "nested" et "optionsCollection" .
    sur le net un tas de développeur a rencontré le probleme .. et pas de solution.
    j' ai bricolé en truc en Java Script ,ça me permet de passer outre. donc ça urge moins. ne t'occupe plus de mon post,et encore merci.
    toutefois si t'as une idée ou un semblant de solution, poste la, je viens souvent sur le forum.
    merci

  10. #10
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    Salut,

    j'ai un truc comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <nested:select property="grp">
      <html:options collection="grplist" 
                           property="grpPK" 
                           labelProperty="grpNom"/>
    </nested:select>
    "grp" : le nom la propriété du formulaire qui va prendre une valeur de la liste déroulante.

    "grplist": la liste d'objet possédant une paire clé/valeur

    "grpPK": la clé

    "grpNom": le libellé

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    biensurque ça ça marche...mais avec cette approche tu stockes dans la propriete "grp" une chaine de caractere (ou un nombre) correspondant a la veleur choisie "grpPK";
    Mais moi je veux recupere le bean complet (grpPK +grpNom) dans ton exemple .. tu saisis la difference?

  12. #12
    ndp
    ndp est déconnecté
    Membre actif Avatar de ndp
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 227
    Points : 255
    Points
    255
    Par défaut
    oui je comprend mieux,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <nested:iterate property="grp">
    <nested:select property="grpPK"> 
      <html:options collection="grplist" 
                           property="grpPK" 
                           labelProperty="grpNom"/> 
    </nested:select>
    ...
    Au final je récupère dans mon attribut "grp" une liste d'objet ayant une paire clé/valeur, dont seulement la clé est valorisée.

    Ce n'est surement pas ton cas, mais je n'ai pas besoin du nom ici, car ce ne sont pas mes objets métiers.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 46
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par hamed
    Mais moi je veux recupere le bean complet (grpPK +grpNom) dans ton exemple .. tu saisis la difference?
    Oui je saisis bien la différence.
    Mais HTML ne te permet pas de faire cela, car un SELECT ne sait renvoyer qu'une value de type CDATA.
    Par contre, rien ne t'empêche de coder un javascript plugé sur le onchange() de ta combo pour ajouter le label à la value.
    Mais là encore, tu vas rester en CDATA.
    Si tu imagines renvoyer un vrai bean ca me parait très compliqué voire mission impossible.
    Pourquoi ne pas augmenter la portée de tes objets serveurs (niveau session par exemple) et de retrouver ton bean à partir de l'Id reçu en requête ? Sans oublier bien sûr de nettoyer ta session pour éviter les "fuites mémoires"...
    Ca serait nettement + naturel

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    en HTML je comprends tres bien que ce soit impossible ... mais avec un TAG STRUTS? je le fais bien avec des nested de type text .. donc ....

  15. #15
    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 407
    Points
    1 407
    Par défaut
    hamed, est ce que tu as regardé la classe LabelValueBean que je t'avais indiqué ?

    je sais pas si ca reponds à ta problematique mais ca sert pour ce genre de cas. Au pire tu l'adaptes.


    @+

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 55
    Points
    55
    Par défaut
    le labelValueBaan fonctionne tres bien.
    seuelemnt des que je mets une lise deroulante avec une otption collection ça cafouille.
    j'ai bricolé eun truc en javascript en attendant.
    je mets resolu.
    passons a autre chose.
    merci

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

Discussions similaires

  1. [Struts] Nested
    Par cosmos38240 dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/04/2009, 17h02
  2. [Struts][nested]request.getSession().getAttribut()
    Par Invité dans le forum Struts 1
    Réponses: 5
    Dernier message: 26/04/2006, 10h42
  3. Réponses: 26
    Dernier message: 24/03/2006, 13h44
  4. [STRUTS] Nested tags validation - Client side
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/07/2005, 13h21
  5. [struts] Nested a longeur variable
    Par l.machot dans le forum Struts 1
    Réponses: 8
    Dernier message: 16/09/2004, 16h33

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