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

  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 ?

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Merci c_nvy, maintenant il me retourne pas d'erreur mais il m'affiche des valeurs bizarre dans la liste service :

    voila ce qu'il m'affiche (code html) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       <select name="selectedItem"><option value="[Ljava.lang.Object;@19ab9c5">[Ljava.lang.Object;@19ab9c5</option>
    <option value="[Ljava.lang.Object;@11a74ef">[Ljava.lang.Object;@11a74ef</option>
    <option value="[Ljava.lang.Object;@1f31432">[Ljava.lang.Object;@1f31432</option></select>

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    A vrai dire, ta requête te renvoie un tableau d'objets à 2 dimension.
    Par contre, tu ne peux pas accéder au contenu par le nom des propriétés.
    Je te suggère (pour faire simple) de récupérer l'objet Service comme ceci :

    Requête Hibernate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return session.createQuery("from Service where active = true").list();
    Et dans la page JSP, ce code devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html:select property="selectedItem">
     <html:optionsCollection name="servitem" value="idService" label="nomService"/>
    </html:select>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    pour mettre une liste ressource dépendantes de la liste service que je viens de créer, j'ai mis dans mon metier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public List getRessourceParService(Long is){
    		 Session session=HibernateUtil.getSessionFactory().getCurrentSession();
    		 session.beginTransaction();
    		 return session.createQuery("from Ressource where active = true and Ressource.idService like :x").setString("x","%"+is+"%").list();
    	 }
    mais dans mon actions qu'elle est la valeur : idService que je vais passer a la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getRessourceParService(Long is)
    afin de récupérer uniquement les ressource dans ce service ?

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    On ne fait pas un like sur une donnée numérique !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    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
    Citation Envoyé par c_nvy Voir le message
    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é.
    Euh, ce n'est pas clair ce que j'ai écrit là ?

    La valeur que tu vas passer à la méthode, c'est tout simplement la valeur sélectée dans la liste déroulante, donc la valeur de la propriété de l'ActionForm que tu as appelé selectedItem.

    Quant à la requête Hibernate, voir la remarque de OButterlin.

  12. #12
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    ne t"en fait pas c_nvy , j'ai testé ce que t'a mis dans la faq mais j'avais une erreur au niveau métier dans le "like", je l'ai corrigé mais il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public List getRessourceParService(Long is){
    		 Session session=HibernateUtil.getSessionFactory().getCurrentSession();
    		 session.beginTransaction();
    		 return session.createQuery("from Ressource where Ressource.active = true and service.idService = "+is).list();
    	 }
    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
    17:59:55,359  WARN RequestProcessor:516 - Unhandled Exception thrown: class java.lang.NullPointerException
    17:59:55,359 ERROR [action]:253 - "Servlet.service()" pour la servlet action a généré une exception
    java.lang.NullPointerException
    	at org.hibernate.hql.ast.tree.IdentNode.resolveAsNakedComponentPropertyRefLHS(IdentNode.java:195)
    	at org.hibernate.hql.ast.tree.IdentNode.resolve(IdentNode.java:85)
    	at org.hibernate.hql.ast.tree.DotNode.resolveFirstChild(DotNode.java:139)
    	at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:397)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4306)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1209)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4022)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3508)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1756)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1681)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:774)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:575)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:279)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:227)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:105)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:74)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:53)
    	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:108)
    	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:88)
    	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1540)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:292)
    	at $Proxy0.createQuery(Unknown Source)
    	at ma.corporate.planning.metier.GestRessource.getRessourceParService(GestRessource.java:35)
    	at presentation.str.CongesAction.execute(CongesAction.java:42)
    	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	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)
    comment puis je utiliser des alias sachant que service.idService est une clé etrangère dans la table ressource ?

  13. #13
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Bonjour, j'ai réussi a avoir mes deux liste dépendante sans erreur, il me retourne les ressource du premierr service sélectionné mais lorsque je change le service il me retourne vers le premier service par défaut, et la liste des ressource reste avec les ressource du service par défaut :

    y a t il quelqu'un pour m'aider ?

  14. #14
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut Comment puis je sélectionné une valeur par défaut
    Comment puis je sélectionné une valeur par défaut sachant que je connais pas les valeurs dans ma base, ?

  15. #15
    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
    TonActionForm est-il dans le scope session ?

  16. #16
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    voila ce que j'ai fait :
    CongesForm :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    package presentation.str;
     
    import java.util.List;
    import java.util.Vector;
     
    import javax.servlet.http.HttpServletRequest;
     
    import ma.corporate.planning.metier.Conge;
    import ma.corporate.planning.metier.Ressource;
    import ma.corporate.planning.metier.Service;
     
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
     
    public class CongesForm extends ActionForm  {
     
    	private String action = "";
    	private long idConge = 1;
    	private Conge conge = new Conge();
    	private List<Conge> conges = new Vector<Conge>();
    	private long selectedItem;
    	private List<Service> services = new Vector<Service>();
    	private Service service = new Service();
    	private long selectRessItem;
    	private List<Ressource> ressources = new Vector<Ressource>();
     
    	public List<Ressource> getRessources() {
    		return ressources;
    	}
    	public void setRessources(List<Ressource> ressources) {
    		this.ressources = ressources;
    	}
    	public long getSelectRessItem() {
    		return selectRessItem;
    	}
    	public void setSelectRessItem(long selectRessItem) {
    		this.selectRessItem = selectRessItem;
    	}
    	public String getAction() {
    		return action;
    	}
    	public void setAction(String action) {
    		this.action = action;
    	}
     
    	public long getIdConge() {
    		return idConge;
    	}
    	public void setIdConge(long idConge) {
    		this.idConge = idConge;
    	}
    	public Conge getConge() {
    		return conge;
    	}
    	public void setConge(Conge conge) {
    		this.conge = conge;
    	}
    	public List<Conge> getConges() {
    		return conges;
    	}
    	public void setConges(List<Conge> conges) {
    		this.conges = conges;
    	}
     
    	public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {
    		ActionErrors errors = new ActionErrors();
     
    		if ((getConge().getDateDebutConge().getTime() > getConge().getDateFinConge().getTime()))
    		errors.add("compdate", new ActionError("error.date.invalides"));
     
    		return errors;
    	}
    	public long getSelectedItem() {
    		return selectedItem;
    	}
    	public void setSelectedItem(long selectedItem) {
    		this.selectedItem = selectedItem;
    	}
    	public List<Service> getServices() {
    		return services;
    	}
    	public void setServices(List<Service> services) {
    		this.services = services;
     
    }
    	public Service getService() {
    		return service;
    	}
    	public void setService(Service service) {
    		this.service = service;
    	}
    }
    CongesAction :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    package presentation.str;
     
    import java.sql.Date;
    import java.util.List;
    import java.util.Vector;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import ma.corporate.planning.metier.Client;
    import ma.corporate.planning.metier.Conge;
    import ma.corporate.planning.metier.GestConge;
    import ma.corporate.planning.metier.GestRessource;
    import ma.corporate.planning.metier.GestService;
    import ma.corporate.planning.metier.Service;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
    import org.apache.struts.action.ActionMessages;
     
    public class CongesAction extends Action{
     
    	List serviceItem;
    	List ressItem;
    	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();
    		GestRessource grs = new GestRessource();
     
    		serviceItem = gsv.getAllService();
    		cgf.setServices(serviceItem);
    		cgf.setSelectedItem(new Long(1));
     
    		Service srv = gsv.getService(new Long(cgf.getSelectedItem()));
    		cgf.setService(srv);
     
    		/*ressItem = (List) cgf.getService().getRessources();
    		cgf.setRessources(ressItem);*/
     
    		if(cgf.getAction().equals("")){
    			cgf.setConges(gcg.getAllCongeDate());
    		}
    		else if(cgf.getAction().equals("Chercher")){
    			return map.findForward("rechercheConge");	
    		}
    		else if(cgf.getAction().equals("Rechercher")){
    			List critere = gcg.critere(cgf.getConge().getDateDebutConge(), cgf.getConge().getDateFinConge(),cgf.getConge().getLibelleConge());
    			cgf.setConges(critere);
    			return map.findForward("VueConge");
    		}
    		else if(cgf.getAction().equals("Editer")){
    			Long idc=new Long(cgf.getIdConge());
    			cgf.setConge(gcg.getConge(idc));
    			return map.findForward("editConge");
    		}
     
    		else if(cgf.getAction().equals("Supprimer")){
    				Long idp=new Long(cgf.getIdConge());
    				gcg.suppConge(idp);
    				cgf.setConges(gcg.getAllConge());
    		}
    		else if(cgf.getAction().equals("Valider")){
    		gcg.addConge(cgf.getConge().getLibelleConge(), cgf.getConge().getDateDebutConge(), cgf.getConge().getDateFinConge(),
    				cgf.getSelectRessItem());
    		cgf.setConges(gcg.getAllCongeDate());
    	    System.out.println("Valider");	
    		}	
    		else if(cgf.getAction().equals("Modifier")){	
    		}
    		else if(cgf.getAction().equals("Ajouter")){
    			cgf.setConge(new Conge());
    			return map.findForward("addConge");	
    		}
    		return map.findForward("VueConge");
    		}
    }
    et dans ma page jsp :
    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
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
     
    <p>&nbsp;</p>
    <p>
    <html:form action="gestConge.do">
    <table border="1" width="45%" bordercolor="294C9E" align="center" class="label">
       <tr bgcolor="294C9E"><td colspan="2" class="retour">Nouveau Cong&eacute; :</td></tr>
     
       <tr><td width="30%">Date d&eacute;but :</td><td><html:text property="conge.dateDebutConge" styleClass="cal" style="CURSOR: text" onclick="ds_sh(this);" readonly="true"></html:text><br/></td></tr>
       <tr><td width="30%">Date fin :</td><td><html:text property="conge.dateFinConge" styleClass="cal" style="CURSOR: text" onclick="ds_sh(this);" readonly="true"></html:text><br/></td></tr>
     
     
       <tr><td width="30%">Type :</td><td>
       <html:select property="conge.libelleConge">
       <html:option value="Cong&eacute; pay&eacute;">Cong&eacute; pay&eacute; </html:option>
       <html:option value="Cong&eacute; materinit&eacute;">Cong&eacute; materinit&eacute;</html:option>
       <html:option value="Arrêt maladie">Arrêt maladie</html:option>
       </html:select><br/></td></tr>
     
       <tr><td width="30%">Service :</td>
       <td>
    	<html:select property="selectedItem"  onchange="document.forms['cgf'].submit();">
        <html:optionsCollection name="cgf" property="services" value="idService" label="nomService"/>
    	</html:select><br/>
        </td></tr>
     
        <tr><td width="30%">Ressource :</td>
        <td>
    	<html:select property="selectRessItem">
        <html:optionsCollection name="cgf" property="service.ressources" value="idRessource" label="matricule"/>
    	</html:select><br/>
        </td></tr>
     
       <tr><td colspan="2">&nbsp;</td></tr>
       <tr><td class="label"><html:link href="gestConge.do?action=">Retour</html:link></td>
       <td align="right"><html:submit value="Valider" property="action" styleClass="valider"></html:submit></td>
     
       </tr>
    </table>
     </html:form>
     <p>
    <hr/>
      <font color="294C9E" class="label"><html:errors/></font>
    j'ai réussi a afficher la liste des service, et puis que j'ai inistialisé avec ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cgf.setSelectedItem(new Long(1));
    , il m'affiche toujours le service 1 et les ressource correspondant si j'enlève cela il me dit :

    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
    18:27:04,859 ERROR [action]:253 - "Servlet.service()" pour la servlet action a généré une exception
    javax.servlet.jsp.JspException: ServletException in '/vues/AjoutConge.jsp': Exception thrown by getter for property service.ressources of bean cgf
    	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)
    Aidez moi svp

  17. #17
    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
    Déjà, il y a quelque chose que je ne comprends pas bien.

    Tu as défini selectedItem de type long dans ton ActionForm.
    Donc, pourquoi l'initialises-tu avec un objet de type Long ?

    Sinon, le problème, c'est que l'initialisation de selectedItem doit se faire seulement au premier affichage.
    Or, là tu le fais à chaque soumission du formulaire.

    Il faudrait peut-être plutôt initialiser la propriété selectItem dans la méthode reset de l'ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void reset(ActionMapping mapping, HttpServletRequest request)
    {
    	this.selectedItem = 1 ;
    }
    et enlever ce code de la méthode execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cgf.setSelectedItem(new Long(1));
    Ainsi, normalement, quand tu exécuteras ce code-là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Service srv = gsv.getService(new Long(cgf.getSelectedItem()));
    la première fois, tu récupèreras le service 1 car initialisé par la méthode reset de l'ActionForm et ensuite, le service réellement sélecté dans la liste déroulante.

  18. #18
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 372
    Par défaut
    Merci infiniment c_nvy, ca marche maintenant, mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.selectedItem = 1 ;
    ca veut dire que je l'initialise au service dont le id est 1 ?

    Lorsque mon formulaire se recharge pour alimenté la deuxième liste, je perd les valeurs des champs que j'ai saisie avant, comment puis je faire pour les garder ?

Discussions similaires

  1. liste déroulante value
    Par chercheur111 dans le forum Forms
    Réponses: 1
    Dernier message: 20/04/2011, 08h37
  2. liste déroulante, champ display <> champ value
    Par PetitChat73 dans le forum Access
    Réponses: 1
    Dernier message: 10/08/2007, 12h50
  3. Réponses: 1
    Dernier message: 03/01/2007, 22h34
  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, 17h03
  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, 22h06

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