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 :

Liste déroulante value et label


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut Liste déroulante value et label
    Bonjour, pour mettre une liste déroulante, j'ai suit le tuto de c_nvy :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Un tag html:select doit être dans un tag html:form afin de pouvoir récupérer le (ou les) éléments sélectés dans la liste déroulante.
    Struts utilisant par défaut le form-bean référencé dans le mapping de l'Action via l'attribut name, il n'est pas utile de coder l'attribut name="nomDuFormBean" dans le tag html:select.
     
    Dans l'attribut property du tag html:select, il faut spécifier le nom de la propriété qui contiendra la (ou les) valeur(s) sélectée(s).
     
     sélection simple : 
    Code :
    <html:select property="selectedItem">=> la propriété selectedItem doit être définie dans l'ActionForm avec getter et setter et doit être de type String.
     
     sélection multiple : 
    Code :
    <html:select property="selectedItems" multiple="true">=> la propriété selectedItems doit être définie dans l'ActionForm avec getter et setter et doit être de type String[].
     
    Pour afficher les options de la liste déroulante, il y a plusieurs possibilités :
     
     Dans le cas où la collection a été mise dans le scope via un setAttribute, elle doit être référencée dans le tag html:options ou html:optionsCollection via l'attribut name.
     
    S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci :
     
    Code :
    <html:select property="selectedItem">
       <html:options name="uneCollection"/>
    </html:select>S'il s'agit d'une collection d’objets ayant pour propriétés id et libelle :
     
    Code :
    <html:select property="selectedItem">
      <html:options collection="uneCollection" property="id" labelProperty="libelle"/>
    </html:select>ou
     
    Code :
    <html:select property="selectedItem">
      <html:optionsCollection name="uneCollection" value="id" label="libelle"/>
    </html:select>la propriété id spécifiée dans l'attribut property correspond à la valeur renvoyée si celle-ci est sélectée et la propriété libelle spécifiée dans l'attribut labelProperty est le label qui s'affiche dans la liste déroulante.
     
     Dans le cas où la collection est une propriété de l'ActionForm et que celle-ci est initialisée via le setter de l'ActionForm dans une Action qui s'exécute avant l'affichage du formulaire, elle doit être référencée dans le tag html:options ou html:optionsCollection via l'attribut property.
     
    S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci :
     
    Code :
    <html:select property="selectedItem">
       <html:options property="uneCollection"/>
    </html:select>S'il s'agit d'une collection d’objets ayant pour propriétés id et libelle :
     
    Code :
    <html:select property="selectedItem">
      <html:optionsCollection property="uneCollection" value="id" label="libelle"/>
    </html:select>S'il s'agit d'une collection de LabelValueBean, celui-ci ayant pour propriété value et label, il n'est pas utile de coder les attributs value et label dans le tag html:optionsCollection :
     
    Code :
    <html:select property="selectedItem">
      <html:optionsCollection property="uneCollection"/>
    </html:select> Si on veut sélectionner par défaut un élément de la liste déroulante, il suffit d'initialiser la propriété correspondante de l'ActionForm dans l'Action qui s'exécute avant l'affichage du formulaire via le code suivant :
     
    Code :
    UneActionForm uneActionForm=(UneActionForm) form ;
    uneActionForm.setSelectedItem(variableContenantLaValeurParDefaut) ;Ceci implique que le form-bean soit référencé via l'attribut name dans le mapping de cette Action dans le struts-config.xml.
     
    Dans le cas où la valeur par défaut est fixe, il est possible d'initialiser la propriété selectedItem dans la méthode reset() dans le cas d’une ActionForm, ou dans l’attribut initial de la balise form-property dans le cas d’une DynaActionForm.
    Mon but est d'afficher un liste déroulante contenant les nom des services que j'ai dans ma base, et stocker derière les idService, que j'aurais besoin dans ma tables ressources ou le idService est une clé etrangère dans cette table, pour cela :

    j'ai mis dans le mon form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String selectedItem;
    Dans mon métier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public List getServiceItem(){
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		return session.createQuery("select nomService from Service where active like true").list();
    	}
    et dans mon action :
    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
     
                 List ServiceItem;
    	List RessourceItem;
     
    	public ActionForward execute(ActionMapping map, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
     
    		CongesForm cgf = (CongesForm)form;
    		GestConge gcg= new GestConge();
    		GestService gsv = new GestService();
     
    		ServiceItem = gsv.getServiceItem();
    		request.setAttribute("servitem", ServiceItem);
    		RessourceItem = gcg.getRessConge();
    		request.setAttribute("ressitem", RessourceItem);
    Dans ma page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       <tr><td width="30%">Service :</td>
       <td>
       <html:select property="selectedItem">
       <html:options name="servitem"/>
       </html:select><br/>
       </td></tr>
    Dans ce cas il m'affiche les nom du service,
    mais lorsque je met dans ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public List getServiceItem(){
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		return session.createQuery("select nomService,idService from Service where active like true").list();
    	}
    et dans ma page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       <tr><td width="30%">Service :</td>
       <td>
       <html:select property="selectedItem" value="idService">
       <html:options name="servitem" labelProperty="nomService"/>
       </html:select><br/>
       </td></tr>
    il m'affiche des erreurs :
    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
    08:51:18,734 ERROR [action]:253 - "Servlet.service()" pour la servlet action a généré une exception
    javax.servlet.jsp.JspException: ServletException in '/vues/AjoutConge.jsp': No getter method available for property nomService for bean under name null
    	at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:923)
    	at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
    	at org.apache.jsp.vues.template.mainLayout_jsp._jspx_meth_tiles_insert_1(mainLayout_jsp.java:199)
    	at org.apache.jsp.vues.template.mainLayout_jsp._jspService(mainLayout_jsp.java:127)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
    	at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    	at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
    	at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)
    	at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Unknown Source)

  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
    Si servitem est une List d'objets ayant pour propriétés idService et nomService, il faut plutôt utiliser le tag html:optionsCollection comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="selectedItem">
       <html:optionsCollection name="servitem" value="idService" label="nomService"/>
    </html:select>

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    ca marche pas ,

    donc je m'explique peut etre que c'est moi qui a mal compris le principe :

    je veux afficher dans ma liste les service existants dans ma base par nom mais derrière la value c'est le id :

    donc pour cela j'ai mis dans mon CongesForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private List<Service> selectedItem= new Vector<Service>();
    avec son getter et son setter
    Dans mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("servitem", cgf.getSelectedItem());
    Dans mon jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="selectedItem" value="idService">
       <html:optionsCollection name="servitem" value="idService" label="nomService"/>
    </html:select>
    ????

  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
    Mais la propriété selectedItem que tu as spécifié dans le tag html:select ne doit pas être de type List mais du même type que idService (String ou int je suppose) parce qu'elle contiendra la valeur de l'idService sélecté.

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    ca marche pas meme si j'ai mis mon selectedItem a Long:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Long selectedItem;
    mais au niveau CongesAction que dois je faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		CongesForm cgf = (CongesForm)form;
    		GestConge gcg= new GestConge();
    		GestService gsv = new GestService();
     
    		request.setAttribute("servitem", gsv.getServiceItem());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public List getServiceItem(){
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		session.beginTransaction();
    		return session.createQuery("select nomService from Service where active like true").list();
    	}

    c'est ca ?

  6. #6
    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
    Ce n'est pas facile de te donner la bonne solution vu que tu changes le code de la méthode getServiceItem() à chaque réponse.

    Si ce code-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public List getServiceItem()
    {
    	Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    	session.beginTransaction();
    	return session.createQuery("select nomService,idService from Service where active like true").list();
    }
    renvoie bien une List d'objets (Service je suppose) de propriétés idService et nomService.

    et si dans l'Action, tu mets la List dans le scope comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GestService gsv = new GestService();
    request.setAttribute("servitem", gsv.getServiceItem());
    Le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="selectedItem">
       <html:optionsCollection name="servitem" value="idService" label="nomService"/>
    </html:select>
    Si ça ne fonctionne pas, peux-tu préciser quel message d'erreur tu obtiens ?

Discussions similaires

  1. liste déroulante value
    Par chercheur111 dans le forum Forms
    Réponses: 1
    Dernier message: 20/04/2011, 07h37
  2. liste déroulante, champ display <> champ value
    Par PetitChat73 dans le forum Access
    Réponses: 1
    Dernier message: 10/08/2007, 11h50
  3. Réponses: 1
    Dernier message: 03/01/2007, 21h34
  4. Récupération d'une value d'une liste déroulante
    Par Yaz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/06/2006, 16h03
  5. Liste déroulante chainée : problème avec value
    Par jpascal dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/08/2005, 21h06

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