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 :

[html:select] Liste déroulante


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Salut
    En fait je veux créer une liste déroulante qui se rempli depuis ma base de données.
    En fait je comprends pas trop comment faut faire,j'ai pas trouver de tuto struts qui m'aide;mais bon:
    au niveau de mon action j'ai mnt un vecteur contenant des objets(model) donc chaque objet correspond à un enregistrement de ma table.
    j'ai fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("vect",vect);
    au niveau de mon action
    mnt en s'inspirant un peu de ce que j'ai trouvé sur ce forum ,j'ai fait ça sur ma page jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html:select property="selection">
        <logic:iterate id="y" name="vect">
                  <option value="<bean:write name="y"property="id"/>"></option>
         </logic:iterate>
    </html:select>
    Mais ça me donne cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.servlet.ServletException: Cannot find bean vect in any scope
    En fait je comprends pas ce que je dois vraimenet faire,
    si quelqu'un pourra m'expliquer au moins le principe
    Merci d'avance

  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
    Il est plus simple d'utiliser le tag html:options comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="selection">
       <html:options collection="vect" property="id" labelProperty="id"/>
    </html:select>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Ou encore (méthode un poil plus appropriée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="selection">
    	<html:optionsCollection name="vect" value="id" label="libelle" />
    </html:select>
    Si tu n'as pas de libellé, remplace "libelle" par "id".
    Si tu veux récupérer ta collection à partir d'une propriété d'un bean, tu fais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:optionsCollection property="vect" name="tonBean" value="id" label="libelle" />
    Si ton form est ton form bean défini pour ton action, inutile de préciser l'attribut "name".

    Je crois que "optionsCollection" ne marche qu'à partir de Struts 1.2. Sinon, cf. solution de c_nvy.

  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
    Citation Envoyé par mixouille
    Je crois que "optionsCollection" ne marche qu'à partir de Struts 1.2. Sinon, cf. solution de c_nvy.
    Ce n'est pas une question de version.

    Tout dépend comment la collection est mise dans le scope.

    Le tag html:optionsCollection ne peut être utilisé que si la collection est une propriété de l'ActionForm et qu'elle a été mise dans le scope via le setter de l'ActionForm.

    Etant donné que luna007 a mis la collection dans le scope via un request.setAttribute, il faut utiliser le tag html:options comme je l'ai indiqué précédemment.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    En effet, je n'étais pas remonté assez haut dans le thread.
    Donc, html:options

    Ceci dit, pourquoi dis-tu cela :
    et qu'elle a été mise dans le scope via le setter de l'ActionForm
    je ne vois pas vraiment le rapport, si ?

    EDIT : au fait, je ne suis pas sûr que l'on réponde vraiment au problème de luna, qui visiblement a un problème pour récupérer son bean. As-tu essayé de préciser scope="request" dans ta balise ? (vu que tu mets ton bean en scope request)

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Salut tt le monde, merci pr vos réponses
    Est ce que vs pouvez m'expliquez c'est quoi la différence entre les 3 méthodes:
    <html:option> ,
    <html:options>, et
    <html:optionsCollection> ?

    et c'est quoi un bean ? est ce que c'est le modèle ?
    .
    J'obtiens tjs l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.apache.jasper.JasperException: Cannot find bean vect in any scope


    Merci encore

  7. #7
    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
    Citation Envoyé par mixouille
    je ne vois pas vraiment le rapport, si ?
    C'est peut-être simplement un problème de formulation.

    Quand tu fais ceci dans l'Action qui initialise le formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonActionForm tonActionForm=(TonActionForm) form ;
    tonActionForm.setUneCollection(uneCollection) ;
    le form-bean étant dans le scope et la collection étant une propriété du form-bean, elle est donc aussi dans le scope.

    Sinon, il n'est pas utile d'ajouter le scope dans la balise. Si la collection est présente dans le scope request, elle sera trouvée.

    Si la collection n'est pas trouvé dans le scope, c'est peut-être simplement parce que le request.setAttribute n'est pas dans l'Action qui s'exécute avant l'affichage du formulaire.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Oui, en fait, c'est le côté "si tu passes par le setter" qui me genait. On pourrait très bien faire la même chose en appelant directement des attributs publiques du bean, ou par introspection, etc... . Et je ne vois pas en quoi ca generait l'exécution de la JSP.

    Sinon, il n'est pas utile d'ajouter le scope dans la balise. Si la collection est présente dans le scope request, elle sera trouvée.
    Tu es sûr de ca ? Si oui, c'est bon à savoir (mais dangereux à utiliser...).

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Réponse à luna :

    - html:option : génère tout simplement une balise <option>. Pratique pour ajouter un item particulier défini dans ton appli
    - html:options : génère une série de <option> à partir d'une collection précisée dans l'attribut "collection"
    - html:optionsCollection : similaire à html:options, mais spécifique à un attribut de ton action form (cf. ce qu'a dit c_nvy tout à l'heure)

    C'est quoi un bean ? Cette question montre que tu as besoin de te documenter un peu.
    Un JavaBean est une classe Java destinée (généralement, mais pas tout le temps) à stocker des données. Les données sont stockées dans les attributs de la classe, et les accesseurs (méthodes get...() et set...() ) permettent d'accéder en lecture et en écriture à ces données.

    Si tu cherches sur le net, tu trouveras probablement beaucoup de pages expliquant qu'un javabean est un "composant réutilisable", gnagnagna... . Tu te fous de ca, un javabean, par définition, est une classe qui a des attributs et des accesseurs pour chacun de ces attributs (+ éventuellement 1 ou 2 autres spécificités, sans importance dans ton cas). C'est tout.

    Et, vu qu'on parle de Struts, tous tes ActionForm sont, par définition, des JavaBean.

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par mixouille
    Réponse à luna :

    - html:option : génère tout simplement une balise <option>. Pratique pour ajouter un item particulier défini dans ton appli
    - html:options : génère une série de <option> à partir d'une collection précisée dans l'attribut "collection"
    - html:optionsCollection : similaire à html:options, mais spécifique à un attribut de ton action form (cf. ce qu'a dit c_nvy tout à l'heure)

    C'est quoi un bean ? Cette question montre que tu as besoin de te documenter un peu.
    Un JavaBean est une classe Java destinée (généralement, mais pas tout le temps) à stocker des données. Les données sont stockées dans les attributs de la classe, et les accesseurs (méthodes get...() et set...() ) permettent d'accéder en lecture et en écriture à ces données.

    Si tu cherches sur le net, tu trouveras probablement beaucoup de pages expliquant qu'un javabean est un "composant réutilisable", gnagnagna... . Tu te fous de ca, un javabean, par définition, est une classe qui a des attributs et des accesseurs pour chacun de ces attributs (+ éventuellement 1 ou 2 autres spécificités, sans importance dans ton cas). C'est tout.

    Et, vu qu'on parle de Struts, tous tes ActionForm sont, par définition, des JavaBean.
    Ok merci pr ces infos .

    Sinon pq il me dit qu'il trouve pas le bean vect dans aucun scope?

  11. #11
    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
    Citation Envoyé par mixouille
    Oui, en fait, c'est le côté "si tu passes par le setter" qui me genait. On pourrait très bien faire la même chose en appelant directement des attributs publiques du bean, ou par introspection, etc... . Et je ne vois pas en quoi ca generait l'exécution de la JSP.
    En tout cas, le tag html:optionsCollection ne fonctionnera que si la collection est une propriété du form-bean et donc si elle est initialisée via le form-bean.
    Citation Envoyé par mixouille
    Tu es sûr de ca ? Si oui, c'est bon à savoir (mais dangereux à utiliser...).
    Si tu ne précises pas de scope, il va automatiquement chercher dans tous les scopes, soit application, session, request et page jusqu'à ce qu'il trouve.

    Cela poserait problème simplement si on mettait deux objets différents avec le même nom dans deux scopes différents.
    Je ne sais pas si je suis bien claire là.

    Citation Envoyé par luna007
    Sinon pq il me dit qu'il trouve pas le bean vect dans aucun scope?
    Fais-tu bien le request.setAttribute dans une Action qui s'exécute avant l'affichage du formulaire ?

  12. #12
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par c_nvy
    Fais-tu bien le request.setAttribute dans une Action qui s'exécute avant l'affichage du formulaire ?
    peut etre c ça le problème : bon , la réponse est nom, j'ai pas su comment le faire ( action s'exécutant avant l'affichage du formulaire ) , ce qui fait j'ai voulu déjà tester de remplir la liste en appyant sur un bouton se trouvant dans le meme formulaire que ma liste , ce qui fait l'action oû j'ai fait le setAttribute s'exécute après avoir appyué sur un bouton ds le même formulaire que la liste . mais mnt il m'affiche meme pas le formulaire.jsp , il me donne l'erreur

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Citation Envoyé par luna007
    j'ai pas su comment le faire ( action s'exécutant avant l'affichage du formulaire )
    Ben, c'est la base de Struts. Au lieu d'accéder directement à ta JSP, tu accèdes à une action d'"init" qui construit tes listes (+ d'autres choses au besoin) et qui forwarde vers ta JSP (configuration dans struts-config.xml). Si tu ne comprends pas, un petit tutoriel peut t'aider (c_nvy, t'en as pas un sous la main ? je suis pas expert en tutoriel ).

    Ta JSP aura alors accès à tes listes dans le scope défini (request ou session généralement), via ton form bean.

    Citation Envoyé par c_nvy
    Si tu ne précises pas de scope, il va automatiquement chercher dans tous les scopes, soit application, session, request et page jusqu'à ce qu'il trouve.
    C'est ca que je ne savais pas. Je pensais que, dans une JSP, le scope par défaut était "page", point barre. D'ailleurs, dans quel ordre cherche-t-il ? Logiquement : page - request - session - application.

    Citation Envoyé par c_nvy
    Cela poserait problème simplement si on mettait deux objets différents avec le même nom dans deux scopes différents.
    C'est ce que j'entendais par "dangereux".

  14. #14
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par mixouille
    Ben, c'est la base de Struts. Au lieu d'accéder directement à ta JSP, tu accèdes à une action d'"init" qui construit tes listes (+ d'autres choses au besoin) et qui forwarde vers ta JSP (configuration dans struts-config.xml). Si tu ne comprends pas, un petit tutoriel peut t'aider (c_nvy, t'en as pas un sous la main ? je suis pas expert en tutoriel ).

    Ta JSP aura alors accès à tes listes dans le scope défini (request ou session généralement), via ton form bean.
    ok ,Merci infiniment pr vos réponse , je vais essayer donc de faire ça

  15. #15
    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
    Citation Envoyé par mixouille
    D'ailleurs, dans quel ordre cherche-t-il ? Logiquement : page - request - session - application.
    Tout à fait, c'est bien dans cet ordre.
    D'ailleurs, dans ma réponse, j'aurais dû les donner dans l'ordre logique.
    J'ai vraiment besoin de vacances moi. Heureusement, je pars demain.

  16. #16
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    En fait le problème que j'ai c que mon formulaire s'affiche après avoir cliqué sur un menuItem ( struts-layout) , et pr ce MenuItem je pense qu'il y a possibilté juste de forwarder pas de passer par un action avant ,
    Bon j'ai essayé de voir comment faire pr passer d'abord par un action mais je vois pas comment je peux faire , si vs avez une idée qui m'aide , merci bcp

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Heu, pour Struts (layout ou non), une action, une servlet, une JSP, enfin tout ce qui est "appelable" dans un lien est autorisé. Et l'appel d'une action est même fortement conseillée !
    As-tu essayé de spécifier une action dans ton attribut "link" ou "action" ? (avec le ".do" de rigueur bien évidemment)

  18. #18
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par mixouille
    Heu, pour Struts (layout ou non), une action, une servlet, une JSP, enfin tout ce qui est "appelable" dans un lien est autorisé. Et l'appel d'une action est même fortement conseillée !
    As-tu essayé de spécifier une action dans ton attribut "link" ou "action" ? (avec le ".do" de rigueur bien évidemment)
    Merci pr la réponse
    je travaille avec struts-layout pr le menu , j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <layout:menuItem key="menu1" action="action"/>
    mais il me dit qu'il est pas accépté selon des TLD que je comprends pas , bon j'ai essayé ensuite avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <layout:menuItem key="menu1" link="pathAction.do" />
    ça marche pas non plus, j'ai ensuite essayé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <layout:menuItem key="menu1" page="/pathAction.do" />
    ,cette fois ça marche mais là j'ai un problème , car je veux passer mnt du Action au actionDispatch , et donc j'ai un soucis pr le passage du paramètre ; ça marche pas
    voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <layout:menuItem key="menu1" page="/action.do?hidden=valeur"/>
    ça marche pas
    Merci d'avance pr votre aide

  19. #19
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Points : 75
    Points
    75
    Par défaut
    En fait voilà plus précisément ce qui me donne comme exception :

    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
     
    java.lang.ClassCastException: com.entreprise.presentation.form.MonActionForm
    	com.entreprise.presentation.action.MonAction.mod(MonAction.java:73)
    	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:585)
    	org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
    	org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    j'arrive pas à savoir pq
    Merci encore pr votre aide

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Visiblement c'est une erreur dans ton action MonAction (ligne 73, méthode mod() ).
    Peux-tu poster le code correspondant ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/07/2009, 21h41
  2. récuperer la valeur d'un champ select (liste déroulante)
    Par bous_saad317 dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/11/2006, 12h14
  3. [HTML] select liste avec decalages des entrees
    Par guy2004 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 19/05/2006, 15h10
  4. [JSP/STRUTS] pré-selection liste déroulante
    Par Zxyankxya dans le forum Struts 1
    Réponses: 7
    Dernier message: 20/01/2006, 15h14
  5. Hauteur SELECT (liste déroulante ?
    Par jaggy19 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/08/2005, 15h19

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