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 :

Mise en oeuvre de DispatchAction


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut Mise en oeuvre de DispatchAction
    SOLUTION FINALE AU DERNIER POST

    Pour faire suite a ce sujet formulaire devant faire appel a une action pour pré-remplir ses champs

    je reprend les derniers posts afin de mettre en oeuvre ce dernier :

    Citation Envoyé par azerr
    Bonjour
    je me permets de m'initer dans la conversation pour tenter de t'eclairer un peu plus sur le fonctionnement de Struts.

    Tout d'abord il ne faut surtout pas faire d'acces au donnees dans ton formulaire ActionForm, ca n'est pas son role. Le formulaire struts te permet de recuperer les informations du formulaire HTML (request.getParameter("myGetter") <=> myActionForm.getMyGetter()).

    Les acces aux donnees doivent s'effectuer dans ton Action Struts et pas dans ton formulaire. Et si tu veux etre super propre les Action Struts doivent faire appel a une couche service qui fait appel a une couche DAO (acces donnees), mais bon je ne vais pas t'embrouiller.

    Ce qui donne :

    public ActionForward execute(....) {
    // Acces aux donnees pour remplir listeQualification
    ...
    // On pose dans la request listeQualification pour pouvoir ensuite l'utiliser
    // dans la View (JSP)
    request.setAttribute("listeQualification",listeQualification);
    }

    A chaque fois que tu appele ton Action, la methode execute est appele,e et ta liste est charge (ceci regle ton probleme de rechargement de la liste apres un submit).

    Par contre je te conseille d'utiliser les DispatchAction de Struts, c'est la meme chose que les Action, mais tu peux mettre un parametre dispatch (ex : load, reload,save,...) qui permet d'indiquer la methode a executer (et pas la methode execute)

    Si tu veux j'ai tenter d'expliquer une architecture Struts/Spring/Hibernate sur
    http://gestcv.sourceforge.net/fr/architecture.html

    Et j'ai explique la facon dont j'utilise les DispatchAction sur
    http://gestcv.sourceforge.net/fr/arc...ts.html#Action Struts
    Je ne vais pas reepliquer sur ce forum, mais je pense qu'il est important de distinguer les donnees qui doivent etre charge tout le temps et les donnees qui doivent etre charger au premeier appel de ta page.

    J'espere que ca pourra t'aider.

    Angelo
    Citation Envoyé par azerr
    Je te donne l'exemple avec DispatchAction (j'ai pas teste)

    Configurer le form (http://java.developpez.com/faq/strut...onfig_formbean)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form-bean name="creeEmployeForm" ... />
    Configurer le DispatchAction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <action name="creeEmployeForm" path="/creeEmploye" scope="request" type="com.myapp.struts.creeEmployeA" validate="false" 
      parameter="dispatch">
           <forward name="success" path="/CreeEmploye.jsp"/>
    </action>
    Important validate="false" (sinon ca declenche le validate a chque foisd que tu appeles ton action)
    parameter="dispatch" pour dir que tu peux utiliser les DispatchAction (il faut que creeEmployeA etende de DispatchACtion).

    public class creeEmployeA extends DispatchAction () {

    public ActionForward load(....) {
    // Charge les combos


    // forward vers ta JSP CreeEmploye.jsp
    return mapping.findForward("success");
    }

    public ActionForward save() {
    // VALIDATION DU FORMULAIRE
    ActionErrors errors = form.validate(mapping, request);
    if (!errors.isEmpty()) {
    // ERREUR DE VALIDATION, SAUVEGARDE DES ERREUR ET RECHARGEMENT DE LA PAGE
    // SANS RECHARGER LE COLLABORATEUR DE LA BASE
    saveErrors(request, errors);
    return load(mapping, actionForm, request, response);
    }
    return load(mapping, actionForm, request, response);
    }
    }



    pour charger ta page appele creeEmploye.do.dispatch=load

    pour sauver creeEmploye.do.dispatch=save

    regarde sur http://java.developpez.com/faq/strut...dispatchAction

    Voila l'ideee general, mais je te conseil de faire un forward display load,..
    (regarde gestcv).

    Angelo
    Citation Envoyé par maxf1
    Au que oui acces base de donnée INTERDITE (par moi) dans les formulaires. Les initialisations des forms dans les formulaires sont des trucs tout simple normalement, genre qu'elle est le radio button par defaut ou quelque chose dans le style. S'il y a des valeurs de la BDD => passé par une action qui se chargera de l'initialisation.

    Tout à faire pour les couches +1 avec toi, ca permet de faire de jolis tests unitaire, avec Junit, StrutsTestCase, HttpUnit, JMeter, etc......(bon courage, )

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut
    bon le probleme se situe dans ma jsp... mon arraylist listeQualification semble ne pas être trouvable...

    pour info,
    struts-config :
    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
    <struts-config>
        <form-beans>
            <form-bean name="QualificationAF" type="com.myapp.struts.QualificationAF"/>
            <form-bean name="EmployeAF" type="com.myapp.struts.EmployeAF"/>
        </form-beans>
     
        <global-exceptions>
     
        </global-exceptions>
     
        <global-forwards>
            <forward name="ListQualification" path="/ListQualification.do"/>
            <forward name="welcome"  path="/Welcome.do"/>
        </global-forwards>
     
        <action-mappings>
            <action name="EmployeAF" path="/creeEmploye" scope="request" type="com.myapp.struts.creeEmployeA" validate="false" parameter="dispatch">
                <forward name="success" path="/CreeEmploye.jsp"/>
            </action>
            <action input="/CreeQualification.jsp" name="QualificationAF" path="/creeQualification" scope="request" type="com.myapp.struts.creeQualificationA">
                <forward name="success" path="/CreationSuccess.jsp"/>
                <forward name="error" path="/CreationError.jsp"/>
            </action>
            <action path="/ListQualification" scope="request" type="com.myapp.struts.listQualificationA">
                <forward name="success" path="/ListQualification.jsp"/>
            </action>
            <action path="/Welcome" forward="/welcomeStruts.jsp"/>
        </action-mappings>
    ma classe creeEmployeA:
    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
    public class creeEmployeA extends DispatchAction {
     
        /* forward name="success" path="" */
        private final static String SUCCESS = "success";
        ConnectionPoolMgr poolManager = ConnectionPoolMgr.getInstance();
        private SysLog syslog;
     
        /**
         * This is the action called from the Struts framework.
         * @param mapping The ActionMapping used to select this instance.
         * @param form The optional ActionForm bean for this request.
         * @param request The HTTP Request we are processing.
         * @param response The HTTP Response we are processing.
         * @throws java.lang.Exception
         * @return
         */
        public ActionForward load(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
            Statement stmt;
            this.syslog = new SysLog("personnel");
            ResultSet rset;
            ArrayList listeQualification = new ArrayList();
            QualificationAF qualification;
     
    //        String user_soc = request.getParameter("user_soc");
            String user_soc = "PERSONNEL";
     
            try{
                Connection conn = poolManager.getConnection("xxxxx");
                stmt = conn.createStatement();
                StringBuffer sql = new StringBuffer(1048);
     
                sql.delete(0,sql.length());
                sql.append("SELECT * FROM \"" + user_soc + "\".QUALIFICATION");
     
                this.syslog.logTrace("-->Listing des équipe (Qualification)");
                rset = stmt.executeQuery (sql.toString());
                while(rset.next()){
                    qualification = new QualificationAF();
                    qualification.setCle(rset.getString(1));
                    qualification.setCategorie(rset.getString(2));
                    qualification.setCoef(rset.getString(3));
                    qualification.setPosition(rset.getString(3));
                    listeQualification.add(qualification);
                }
     
                rset.close();
                poolManager.freeConnection("xxxxx", conn);
            }
            catch (Exception e) {
                this.syslog.logError("Impossible d'executer la requete de creation (Qualification)");
                this.syslog.logError("Motif : "+e);
                this.syslog.logError("");
            }
            request.setAttribute("listeQualification",listeQualification);
            return mapping.findForward(SUCCESS);
        }
     
        public ActionForward execute(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
            return mapping.findForward(SUCCESS);
     
        }
    }
    et dans ma jsp, mon combo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="qualification">
                    <html:options collection="listeQualification" property="cle" labelProperty="categorie"/>
                 </html:select>
    et quand je pointe sur creeEmploye.do.dispatch=load j'obtiens une erreur 404...

  3. #3
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Et ta classe EmployeAF tu peux la mettre aussi ...

    Et donne nous aussi la stack de ton erreur 404.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut
    l'erreur est

    Etat HTTP 404 - /Personnel/creeEmploye.do.dispatch=load

    type Rapport d'état

    message /Personnel/creeEmploye.do.dispatch=load

    description La ressource demandée (/Personnel/creeEmploye.do.dispatch=load) n'est pas disponible.
    Apache Tomcat/5.5.17
    mon EmployeAF :
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    package com.myapp.struts;
     
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
     
    /* classes applicatives access oracle 
    import java.sql.*; 
    import java.io.*;
    import java.util.*;
    import java.text.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import composant.pool.*;
    import composant.syslog.*;*/
     
    /**
     *
     * @author gregory
     * @version
     */
     
    public class EmployeAF extends org.apache.struts.action.ActionForm {
     
        private String cle = null;
        private String code = null;
        private String nom = null;
        private String prenom = null;
        private String adresse = null;
        private String cp = null;
        private String ville = null;
        private String fixe = null;
        private String mobile = null;
        private String secu = null;
        private String qualification = null;
        private String entree = null;
        private String sortie = null;
        private String societe = null;
        private String service = null;
        private String emploi = null;
        private String ouvrable = null;
        private String equipe = null;
        private String reglement = null;
        private String rib = null;
        private String photo = null;
     
        public String getCle() {
            return cle;
        }
     
        public void setCle(String Cle) {
            cle = Cle;
        }
     
        public String getCode() {
            return code;
        }
     
        public void setCode(String cod) {
            code = cod;
        }
     
        public String getNom() {
            return nom;
        }
     
        public void setNom(String no) {
            nom = no;
        }
     
        public String getPrenom() {
            return prenom;
        }
     
        public void setPrenom(String pren) {
            prenom = pren;
        }
     
        public String getAdresse() {
            return adresse;
        }
     
        public void setAdresse(String adrs) {
            adresse = adrs;
        }
     
        public String getCp() {
            return cp;
        }
     
        public void setCp(String cpost) {
            cp = cpost;
        }
     
        public String getVille() {
            return ville;
        }
     
        public void setVille(String vil) {
            ville = vil;
        }
     
        public String getFixe() {
            return fixe;
        }
     
        public void setFixe(String fix) {
            fixe = fix;
        }
     
        public String getMobile() {
            return mobile;
        }
     
        public void setMobile(String mob) {
            mobile = mob;
        }
     
        public String getSecu() {
            return secu;
        }
     
        public void setSecu(String Secu) {
            secu = Secu;
        }
     
        public String getQualification() {
            return qualification;
        }
     
        public void setQualification(String Qualification) {
            qualification = Qualification;
        }
     
        public String getEntree() {
            return entree;
        }
     
        public void setEntree(String ent) {
            entree = ent;
        }
     
        public String getSortie() {
            return sortie;
        }
     
        public void setSortie(String sort) {
            sortie = sort;
        }
     
        public String getSociete() {
            return societe;
        }
     
        public void setSociete(String Societe) {
            societe = Societe;
        }
     
        public String getService() {
            return service;
        }
     
        public void setService(String serv) {
            service = serv;
        }
     
        public String getEmploi() {
            return emploi;
        }
     
        public void setEmploi(String emp) {
            emploi = emp;
        }
     
        public String getOuvrable() {
            return ouvrable;
        }
     
        public void setOuvrable(String ouvr) {
            ouvrable = ouvr;
        }
     
        public String getEquipe() {
            return equipe;
        }
     
        public void setEquipe(String equip) {
            equipe = equip;
        }
     
        public String getReglement() {
            return reglement;
        }
     
        public void setReglement(String Reglement) {
            reglement = Reglement;
        }
     
        public String getRib() {
            return rib;
        }
     
        public void setRib(String Rib) {
            rib = Rib;
        }
     
        public String getPhoto() {
            return photo;
        }
     
        public void setPhoto(String Photo) {
            photo = Photo;
        }
     
        /**
         *
         */
        public EmployeAF() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
            ActionErrors errors = new ActionErrors();
            if (getNom() == null || getNom().length() < 1){ 
                errors.add("nomVide", new ActionMessage("erreur.creeEmp.nom.requis"));
                // TODO: add 'error.name.required' key to your resources
            }
            if (getPrenom() == null || getPrenom().length() < 1) {
                errors.add("prenomVide", new ActionMessage("erreur.creeEmp.prenom.requis"));
            }
            return errors;
        }
    }

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut
    bon j'ai lu ton post sur l'autre sujet un peu tard, et il me semblait bizarre de saisir une url du type creeEmploye.do.dispatch=load.

    Du coup en entrant une url normalement faite, comme creeEmploye.do?dispatch=load j'ai donc ma jsp qui me retourne une 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
    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
    Etat HTTP 500 -
     
    type Rapport d'exception
     
    message
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception
     
    org.apache.jasper.JasperException: Cannot find bean under name listeQualification
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    	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:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
     
    cause mère
     
    javax.servlet.ServletException: Cannot find bean under name listeQualification
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    	org.apache.jsp.CreeEmploye_jsp._jspService(CreeEmploye_jsp.java:103)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    	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:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
     
    cause mère
     
    javax.servlet.jsp.JspException: Cannot find bean under name listeQualification
    	org.apache.struts.taglib.html.OptionsTag.getIterator(OptionsTag.java:364)
    	org.apache.struts.taglib.html.OptionsTag.doEndTag(OptionsTag.java:186)
    	org.apache.jsp.CreeEmploye_jsp._jspx_meth_html_options_0(CreeEmploye_jsp.java:774)
    	org.apache.jsp.CreeEmploye_jsp._jspx_meth_html_select_0(CreeEmploye_jsp.java:742)
    	org.apache.jsp.CreeEmploye_jsp._jspx_meth_html_form_0(CreeEmploye_jsp.java:239)
    	org.apache.jsp.CreeEmploye_jsp._jspService(CreeEmploye_jsp.java:92)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    	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:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.17.
    Apache Tomcat/5.5.17
    il semble que mon listeQualification ne soit pas mis dans le scope avant que la jsp ne soit retournée... (et effectivement je n'ai aucune trace d'acces a ma base dans mes logs donc l'actionForward load n'as pas du se faire...


    autre sujet, j'ai effectivement pris ma propre confention de nommage, mes ActionForm se terminent par AF et mes Actions se terminent par A
    d'ou le EmployeAF et le creeEmployeA qui correspondent respectivement à un form et a une action

  6. #6
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Excuse moi je n'avais pas vu ta convention de nommage.

    Pour blinder la JSP, je te conseille d'utilise logic:present, ca evitera d'avoir une erreur JSP comme tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html:select property="qualification">
       <logic:present name="listeQualification" >
                    <html:options collection="listeQualification" property="cle" labelProperty="categorie"/>
        </logic:present>
    </html:select>
    Enelve la methode execute de ton Action (peut etre qu'il prend le dessus sur ton ActionForward load)

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut
    et bien ça y est....

    Effectivement execute prend le dessus il semble...

    merci pour l'astuce du :present

    Bon maintenant, pour la comunauté, je prepare un post recapitulant tout ceci en essayant d'être le plus clair possible (avec une charte de nommage plus clair, il est vrai que je me comprend moi même mais ce ne sera pas forcement le cas du premier venu)

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut recapitulatif simplifié pour la mise en oeuvre
    Tout d'abord, commençons par struts-config en lui definissant parameter="dispatch" afin qu'il prenne en compte DispatchAction, ainsi que validate="false" pour que cela fonctionne.

    struts-config :
    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
        <form-beans>
            <form-bean name="EmployeForm" type="com.myapp.struts.EmployeForm"/>
        </form-beans>
     
        <global-exceptions>
        </global-exceptions>
     
        <global-forwards>
        </global-forwards>
     
        <action-mappings>
            <action name="EmployeForm" path="/Employe" scope="request" type="com.myapp.struts.EmployeAction" validate="false" parameter="dispatch">
                <forward name="success" path="/Employe.jsp"/>
                <forward name="fin" path="/menu.jsp"/>
            </action>
        </action-mappings>
    Ensuite la classe ActionForm tout ce qu'il y a de plus classique

    le Form bean EmployeForm :
    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
    95
    96
    97
    98
    /*
     * EmployeForm.java
     *
     * Created on 6 mars 2007, 15:30
     */
     
    package com.myapp.struts;
     
    import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
     
    /* classes applicatives access oracle 
    import java.sql.*; 
    import java.io.*;
    import java.util.*;
    import java.text.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import composant.pool.*;
    import composant.syslog.*;*/
     
    /**
     *
     * @author gregory
     * @version
     */
     
    public class EmployeForm extends org.apache.struts.action.ActionForm {
     
        private String cle = null;
        private String code = null;
        private String nom = null;
        private String prenom = null;
        private String qualification = null;
     
        public String getCle() {
            return cle;
        }
     
        public void setCle(String Cle) {
            cle = Cle;
        }
     
        public String getCode() {
            return code;
        }
     
        public void setCode(String cod) {
            code = cod;
        }
     
        public String getNom() {
            return nom;
        }
     
        public void setNom(String no) {
            nom = no;
        }
     
        public String getPrenom() {
            return prenom;
        }
     
        public void setPrenom(String pren) {
            prenom = pren;
        }
     
        public String getQualification() {
            return qualification;
        }
     
        public void setQualification(String Qualification) {
            qualification = Qualification;
        }
     
     
        /**
         *
         */
        public EmployeForm() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
            ActionErrors errors = new ActionErrors();
            if (getNom() == null || getNom().length() < 1){ 
                errors.add("nomVide", new ActionMessage("erreur.creeEmp.nom.requis"));
                // TODO: add 'error.name.required' key to your resources
            }
            if (getPrenom() == null || getPrenom().length() < 1) {
                errors.add("prenomVide", new ActionMessage("erreur.creeEmp.prenom.requis"));
            }
            return errors;
        }
    }
    Et entrons dans le plus gros du morceau...
    L'action doit etendre DispatchAction et nous devons definir des actions que l'on pourra declencher par la variable dispatch de l'url
    l'action EmployeAction :
    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
    /*
     * EmployeAction.java
     *
     * Created on 8 mars 2007, 17:31
     */
     
    package com.myapp.struts;
     
    /* classes struts */
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.actions.DispatchAction;
     
    /**
     *
     * @author gregory
     * @version
     */
     
    public class EmployeAction extends DispatchAction {
     
        private final static String SUCCESS = "success";
        private final static String FIN = "fin";
     
        /**
         * This is the action called from the Struts framework.
         * @param mapping The ActionMapping used to select this instance.
         * @param form The optional ActionForm bean for this request.
         * @param request The HTTP Request we are processing.
         * @param response The HTTP Response we are processing.
         * @throws java.lang.Exception
         * @return
         */
        public ActionForward load(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
            ArrayList listeQualification = new ArrayList(); //liste qui sera retournée dans request pour exploitation par la jsp
            QualificationAF qualification;
     
            try{
     
                // ACCESS BASE DE DONNEES OU AUTRE
     
                // RETOUR DES INFOS ET CREATION DE LA LISTE
                while(rset.next()){
                    qualification = new QualificationAF(); 
                    qualification.setCle(rset.getString(1));
                    qualification.setCategorie(rset.getString(2));
                    qualification.setCoef(rset.getString(3));
                    qualification.setPosition(rset.getString(3));
                    listeQualification.add(qualification);
                }
     
            }
            catch (Exception e) {
                // GESTION DES ERREURS
            }
     
            // ENVOIE DE LA LISTE DANS LE SCOPE REQUEST
            request.setAttribute("listeQualification",listeQualification); 
     
            // FORWARD SUR LA JSP DE SAISIE
            return mapping.findForward(SUCCESS);
        }
     
        public ActionForward save(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            // TRAITEMENT DU FORMULAIRE ET ENREGISTREMENT DES INFOS EN BASE DE DONNEE OU AUTRE
     
            // FORWARD VERS LA PAGE SUIVANTE
            return mapping.findForward(FIN);
        }
    }
    Et enfin notre jsp qui à la charge d'afficher un combo utilisant la liste mise dans le scope request par l'action

    la jsp Employe.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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <%@page contentType="text/html"%>
    <%@page pageEncoding="ISO-8859-1"%>  // pour le support des accents dans le formulaire
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
    <%--
    The taglib directive below imports the JSTL library. If you uncomment it,
    you must also add the JSTL library to the project. The Add Library... action
    on Libraries node in Projects view can be used to add the JSTL 1.1 library.
    --%>
    <%--
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
    --%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Nouvel employe</title>
        </head>
        <body bgcolor="#BAC5F9">
     
        <html:form action="Employe.do?dispatch=save">
        <table align="center" border="0" cellspacing="0">
            <tr>
                <td>Code</td>
                <td width="5">&nbsp;</td>
                <td><html:text property="code" size="5" maxlength="5" /></td>
                <td width="15">&nbsp;</td>
                <td>&nbsp;</td>
                <td width="5">&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td width="100">Nom</td>
                <td width="5">&nbsp;</td>
                <td><html:text property="nom" size="20" maxlength="20" /></td>
                <td width="15">&nbsp;</td>
                <td width="100">Prenom</td>
                <td width="5">&nbsp;</td>
                <td><html:text property="prenom" size="20" maxlength="20" /></td>
            </tr>
            <tr>
                <td width="100">Qualification</td>
                <td width="5">&nbsp;</td>
                <td><html:select property="qualification">
                    <html:options collection="listeQualification" property="cle" labelProperty="categorie"/>
                 </html:select></td>
                <td width="15">&nbsp;</td>
                <td>&nbsp;</td>
                <td width="5">&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
        </table>
     
        <br>
        <div align="center"><html:submit value="creer" /> <html:reset value="reset" /><br><html:errors /></div>
        </html:form>
     
        </body>
    </html>
    Donc pour proceder a l'utilisation de tout ce petit monde, nous entrons l'url Employe.do?dispatch=load dans le navigateur.
    Struts vas donc commencer par executer l'actionForward load de notre action comme nous lui demandons par l'intermediaire de ?dispatch=load dans notre url.

    l'action effectue donc son petit travail et renvoie dans le scope request la(ou les) liste pour les rendre disponibles a la jsp.

    Chose importante, dans l'action si on laisse la methode execute, celle-ci prend le dessus sur le dispatch. il faut donc la supprimer pour que cela fonctionne.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 29
    Par défaut
    Je rajoute mon petit grain de sel parce que je suis en train d'essayer de faire la même chose.

    Il y a juste un petit truc qui me chiffonne.
    Vu qu'on met validate="false", ça implique qu'il n'y aura pas de validation quand on va soumettre le formulaire (Employe.do?dispatch=save) ? Ou j'ai tout faux ?

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut
    effectivement petit oublie de ma part,

    pour compenser cela, il ne faut pas oublier de valider ta form dans ton action dans ta methode save

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ActionForward save() {
    // VALIDATION DU FORMULAIRE
    ActionErrors errors = form.validate(mapping, request);

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Par défaut
    Citation Envoyé par gregounet
    effectivement petit oublie de ma part,

    pour compenser cela, il ne faut pas oublier de valider ta form dans ton action dans ta methode save

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ActionForward save() {
    // VALIDATION DU FORMULAIRE
    ActionErrors errors = form.validate(mapping, request);
    Dans ce cas, tu laisses le validate à false puis tu valides ton formulaire dans la méthode save(). il n 'y a pas une autre manière de faire en utilisant le validate="true" ?

  12. #12
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Si tu ne veux valider que dans certain cas et pas tout le temps obligation de mettre validate = "false" et de le valider lorsque tu le souhaites.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Par défaut
    tu peux me montrer comment procéder si je veux valider mon formulaire en utilisant validate="true" merci

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 81
    Par défaut
    et bien tu laisse le validate="false" dans le struts-config.xml

    mais dans ton Action tu ajoute la methode que je t'ai donné plus haut, voici un exemple (en gras italique rouge a la fin):
    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
    /*
     * EmployeAction.java
     *
     * Created on 8 mars 2007, 17:31
     */
     
    package com.myapp.struts;
     
    /* classes struts */
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.actions.DispatchAction;
    import org.apache.struts.action.ActionErrors;
     
    /**
     *
     * @author gregory
     * @version
     */
     
    public class EmployeAction extends DispatchAction {
        
        private final static String SUCCESS = "success";
        private final static String FIN = "fin";
        
        /**
         * This is the action called from the Struts framework.
         * @param mapping The ActionMapping used to select this instance.
         * @param form The optional ActionForm bean for this request.
         * @param request The HTTP Request we are processing.
         * @param response The HTTP Response we are processing.
         * @throws java.lang.Exception
         * @return
         */
        public ActionForward load(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
            ArrayList listeQualification = new ArrayList(); //liste qui sera retournée dans request pour exploitation par la jsp
            QualificationAF qualification;
            
            try{
     
                // ACCESS BASE DE DONNEES OU AUTRE
     
                // RETOUR DES INFOS ET CREATION DE LA LISTE
                while(rset.next()){
                    qualification = new QualificationAF(); 
                    qualification.setCle(rset.getString(1));
                    qualification.setCategorie(rset.getString(2));
                    qualification.setCoef(rset.getString(3));
                    qualification.setPosition(rset.getString(3));
                    listeQualification.add(qualification);
                }
     
            }
            catch (Exception e) {
                // GESTION DES ERREURS
            }
     
            // ENVOIE DE LA LISTE DANS LE SCOPE REQUEST
            request.setAttribute("listeQualification",listeQualification); 
     
            // FORWARD SUR LA JSP DE SAISIE
            return mapping.findForward(SUCCESS);
        }
     
        public ActionForward save(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
    
            ActionErrors errors = form.validate(mapping, request);
    
            // TRAITEMENT DU FORMULAIRE ET ENREGISTREMENT DES INFOS EN BASE DE DONNEE OU AUTRE
     
            // FORWARD VERS LA PAGE SUIVANTE
            return mapping.findForward(FIN);
        }
    }
    j'espère que tu aura notté qu'il faut importer la classe ActionError cf en gras italique rouge dans les import

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Par défaut
    si je connais déjà cette solution, mais je voudrai savoir s'il y a une autre solution en utilisant le validate à true. merci

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

Discussions similaires

  1. Problème mise en oeuvre UDF
    Par lio33 dans le forum SQL
    Réponses: 5
    Dernier message: 18/11/2005, 21h50
  2. Documentation de mise en oeuvre
    Par babar_le_fou dans le forum C
    Réponses: 5
    Dernier message: 06/11/2005, 15h07
  3. Mise en oeuvre d'une standby
    Par armando123 dans le forum Oracle
    Réponses: 1
    Dernier message: 17/10/2005, 12h18
  4. [JMS] Mise en oeuvre
    Par tery dans le forum Java EE
    Réponses: 4
    Dernier message: 21/02/2005, 13h35

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