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 :

Problème ActionForm et checkbox


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut Problème ActionForm et checkbox
    j'ai une jsp qui affiche toutes mes boisson une boisson a pour attribut :

    nom
    type
    description
    id

    voilà ma jsp qui affiche toutes les boissons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <html:form action="/delete">
                    <logic:iterate id="boisson" name="listboisson">
                        <tr>
                            <td> <html:checkbox property="lst.id"  /></td>
                            <td> <bean:write name="boisson" property="nom"/></td>
                            <td> <bean:write name="boisson" property="type"/></td>
                            <td> <bean:write name="boisson" property="description"/></td>
                            <td> <bean:write name="boisson" property="prix"/> €</td>
                            <td> <a href=/Drink_me_I_m_famous_/modif.do?id=<bean:write name="boisson" property="id"/>><img src="http://localhost:8084/Drink_me_I_m_famous_/Image/modifier.gif"/></a></td>
                        </tr>
                    </logic:iterate>
                    <html:submit value="Supprimer"/> 
                </html:form>
    J'aimerais mettre une checkbox pour chaque boisson , et les supprimer lorsque je clique sur supprimer .

    Voilà le strut-conf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        <form-beans>
            <form-bean name="deleteform" type="com.bar.deleteFORM"/>
        </form-beans>
     
            <!-- Mapping Formulaire Suppression de boissons -->
            <action path="/delete" 
                    type="com.bar.viewboissonAction"
                    name="deleteform">
                <forward name="viewlist"       path="/WEB-INF/Website/viewboisson.jsp"/>
            </action>
    et enfin voilà ma deleteForm.java:

    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
     
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package com.bar;
     
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.struts.action.ActionForm;
     
    public class deleteFORM extends ActionForm {
     
        private List<Integer> lst;
     
        public deleteFORM() {
            lst = new ArrayList<Integer>();
        }
    }
    Le problème c'est que je ne sais pas ce que vont renvoyer les checkbox ?? j'aimerait qu'elle renvoye l'id de mes boisson mais je n'arrive pas a imbriqués les balise <html: pour faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td> <html:checkbox property="lst.id"  value="<bean:write name="boisson" property="id"/>" /></td>
    Mais il m'est impossible d'imbriquer ces balise

    J'ai donc une question :

    - Qu'elle form doit avoir mon ActionForm pour récuperer les differentes value de mes checkbox ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    tu peux utiliser les EL (expression language) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td> <html:checkbox property="lst.id" value="${boisson.id}" /></td>
    éventuellement, tu dois utiliser la balise html-el au lieu de html suivant ta version de J2EE utilisée.

  3. #3
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    Je me demande si on est utiliser d'obliger une <html:form pour les checkbox ???

    je me demande si je ne met pas de <html:form est ce que mes checkbox seront envoyer en get et est ce que je pourrait eventuellement les recup dans ma prochaine Action via arg2.getAttribute("propertycheckbox"); ??

    Si je suis obliger d'utiliser un formulaire , suis - je obliger d'utiliser une ActionFORM pour le traiter ?

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Bonjour,

    Pour ce qui concerne la seconde question, en utilisant struts, un formulaire est forcément traité par un ActionForm.
    Après, tu es libre de ne pas utiliser de tag struts pour la liste de checkbox, mais dans tous les cas, tu passeras par l'actionForm déclaré, et tout ce qui concerne ton formulaire doit bien se situer dans les balises <html:form>...

  5. #5
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    ok mais ce que je ne comprend pas c'est que mes boisson sont afficher dynamiquement avec un <logic:iterate

    donc il faut plusieur chose :

    - ajoutez une checkbox a chaque boisson avec une propriété différente ?
    - Faire correspondre le formulaire et le actionform

    Le problème c'est que je ne vois vraiment pas quel guelle doit avoir le ActionForm pour récuperer la property de chaque checkbox

  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
    Il vaudrait mieux utiliser le tag html:multibox et définir dans l'ActionForm une propriété de type String[].

  7. #7
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    Ok j'essayerais cette méthode demain je vous tiens au courant de l'avancement

  8. #8
    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
    Pour que cela fonctionne, il ne faut pas oublier d'initialiser le tableau de String dans la méthode reset de l'ActionForm.

  9. #9
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    J'ai essayer la solution que tu me proposais. Mais j'ai du mal a comprendre sont fonctionnement dit moi si j'ai bien compris si sa te dérange pas :

    mon Fomulaire 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
     
                <html:form action="/delete">
                    <logic:iterate id="boisson" name="listboisson">
                        <tr>
                            <td> <html:multibox property="boissonSelect"> <bean:write name="boisson" property="id"/></html:multibox></td>
                            <td> <bean:write name="boisson" property="nom"/></td>
                            <td> <bean:write name="boisson" property="type"/></td>
                            <td> <bean:write name="boisson" property="description"/></td>
                            <td> <bean:write name="boisson" property="prix"/> €</td>
                            <td> <a href=/Drink_me_I_m_famous_/modif.do?id=<bean:write name="boisson" property="id"/>><img src="http://localhost:8084/Drink_me_I_m_famous_/Image/modifier.gif"/></a></td>
                        </tr>
                    </logic:iterate>
                    <html:submit value="Supprimer"/>
                </html:form>
    Suivant ce que j'ai pu comprendre ( dit le moi si je me trompe ) , pour chaque boisson de ma listboisson je vais avoir une checkbox qui aura pour valeur l'id de ma boisson ????

    Si j'ai bien compris j'ai donc crée mon ActionForm comme suit :

    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
    public class deleteFORM extends ActionForm {
     
        private static String[] boissonSelect;
     
        public static String[] getLstid() {
            return boissonSelect;
        }
     
        public static void setLstid(String[] aLstid) {
            boissonSelect = aLstid;
        }
     
        public deleteFORM() {
     
           boissonSelect = new String[25];
        }
     
     
    }
    La si j'ai bien compris je récupere l'id de mes checkbox cocher et ils se mettent automatiquement dans le tableau de string ???

    Ensuite j'ai mon Action qui récupère se tableau et je fais le traitement souhaiter...

    Le problème c'est que j'ai eu le droit a cette belle erreur :

    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
     
    exception
     
    org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: No getter method available for property boissonSelect for bean under name org.apache.struts.taglib.html.BEAN
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
    	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
    	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    	org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
     
    cause mère
     
    javax.servlet.ServletException: javax.servlet.jsp.JspException: No getter method available for property boissonSelect for bean under name org.apache.struts.taglib.html.BEAN
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
    	org.apache.jsp.WEB_002dINF.Website.viewboisson_jsp._jspService(viewboisson_jsp.java:197)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
    	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    	org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)
    	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    	org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:318)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

  10. #10
    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
    Dans l'ActionForm, il faut mettre getter et setter sur le tableau de String boissonSelect et initialiser boissonSelect dans la méthode reset plutôt que dans le constructeur comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        private String[] boissonSelect;
     
        public String[] getBoissonSelect() {
            return this.boissonSelect;
        }
     
        public void setBoissonSelect(String[] boissonSelect) {
            this.boissonSelect = boissonSelect;
        }
     
        public void reset(ActionMapping mapping, HttpServletRequest request)
        {
           this.boissonSelect = new String[25];
        }
    Petite remarque : l'ActionForm deleteFORM ne respecte pas les conventions de nommage Java, soit plus précisément :
    Les noms de classes sont écrits en minuscule, chaque première lettre d'un mot est en majuscule.
    Je te conseille donc de la renommer en DeleteForm.

  11. #11
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    Sa marche parfaitement le seul problème que je rencontre sais pour récupérer le tableau de String,


    Dans mon action je fait :

    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
    public class deleteAction extends Action {
     
        @Override
        public ActionForward execute(ActionMapping arg0, ActionForm arg1, HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
     
            boissonService service = new boissonService();
            int i;
            String[] lstid = arg2.getParameter("boissonSelect");
     
            for(i=0;i<=25;i++){
     
                if(lstid[i]!=null){
                service.getinstance().remove_boisson(service.getinstance().find_boisson(Integer.parseInt(lstid[i])));
                }
            }
     
            return arg0.findForward("viewlists");
        }
    }
    le arg2.getparameter("boissonSelect");

    me retourne un string mais je doit récuperer un String[] et impossible de le caster en String[]

    Comment dois-je faire pour récuperer ce fameux tableau tant convoité ?

  12. #12
    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
    Via le getter de l'ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    deleteFORM deleteForm = (deleteFORM) form ;
    String[] lstid = deleteForm.getBoissonSelect() ;

  13. #13
    Membre éclairé Avatar de Luffy49
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 399
    Par défaut
    exact j'avais trouver tous seul lol

    Ce qui est chiant avec struts c'est qu'il y a plein de concept, et on se mélange un peu les pinceaux pour les débutant comme moi le principale c'est que j'y suis arriver

    Merci a toi

  14. #14
    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
    De rien.

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

Discussions similaires

  1. Problème avec un Checkbox
    Par Jiyuu dans le forum Windows Forms
    Réponses: 16
    Dernier message: 22/02/2007, 18h22
  2. [VB.NET] Problème ListView avec checkbox
    Par elkidos dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/02/2007, 15h27
  3. Problème avec les checkbox
    Par presteus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/07/2006, 01h06
  4. probléme avec une checkbox
    Par ardamus dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2006, 19h58
  5. [JavaScript] Problème cocher/décocher checkbox
    Par Le_tzao dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 01/12/2005, 10h07

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