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 :

accès page avec un form => java.lang.IllegalAccessException


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut accès page avec un form => java.lang.IllegalAccessException
    Bonjour,

    Ca va faire maintenant un an que j'ai pas touché à un projet struts et me voila atteint de la plus grande des amnésies. Je n'arrive pas à lier un formulaire situé dans une JSP à mon actionForm. Sur le projet, nous utilisons struts Tiles pour construire nos pages.

    J'obtiens l'erreur suivante lorsque j'essaye d'acceder à la page:
    19 avr. 2008 12:28:20 org.apache.struts.util.RequestUtils createActionForm
    GRAVE: Error creating form bean of class fr.argosi.administration.InfoPersoForm
    java.lang.IllegalAccessException: Class org.apache.struts.config.FormBeanConfig can not access a member of class fr.argosi.administration.InfoPersoForm with modifiers ""
    at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:289)
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:254)
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:208)
    at org.apache.struts.action.RequestProcessor.processActionForm(RequestProcessor.java:319)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:192)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)
    Le corps de la page que j'essaye d'atteindre (version très simplifiée)
    Appel fait par l'intermédiaire d'un lien: infoPerso.do
    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
     
    <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
    <html:form method="post" action="enregistrer.do" >
        <center>
            <table>
                <tr>
                    <td><label>Intitule </label></td>
                    <td><html:text property="intitule" /></td>
                </tr>
                <tr>
                    <td><label>Nom Entreprise</label></td>
                    <td><html:text property="nomEntreprise" /></td>
                </tr>
            </table>
        </center>
    </html:form>

    Le Struts-config.xml:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
        "http://struts.apache.org/dtds/struts-config_1_2.dtd">
    <struts-config>
        <!-- ======== Form Bean Definitions ======== -->
        <form-beans>
            <form-bean name="formInfoPerso" type="fr.argosi.administration.InfoPersoForm" />
        </form-beans>
     
        <!-- ======== Action Mapping Definitions ======== -->
        <action-mappings>
            <action path="/infoPerso" 
                    name="formInfoPerso"
                    type="fr.argosi.administration.InfoPersoAction"
                    scope="request">
                <forward name="success" path="infoPerso"/>
            </action>
        </action-mappings>
     
        <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
     
     
        <!-- ======== Tiles plugin ======== -->
        <plug-in className="org.apache.struts.tiles.TilesPlugin">
            <set-property     property="definitions-config"
                            value="    /WEB-INF/config/tiles-defs.xml"/>
            <set-property property="moduleAware" value="true"/>
        </plug-in>
     
        <!-- ======== Validator plugin ======== -->
        <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
            <set-property     property="pathnames"
                            value="    /WEB-INF/config/validator-rules.xml"/>
        </plug-in>
    </struts-config>
    L'actionForm:
    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
     
    package fr.argosi.administration;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
     
    public class InfoPersoForm extends ActionForm {
     
        /**
         * Numero de serial automatique.
         */
        private static final long serialVersionUID = -3211966788964671747L;
     
        private String intitule = null;
     
        private String nomEntreprise = null;
     
        public String getIntitule() {
        return intitule;
        }
     
        public void setIntitule(String intitule) {
        this.intitule = intitule;
        }
     
        public String getNomEntreprise() {
        return nomEntreprise;
        }
     
        public void setNomEntreprise(String nomEntreprise) {
        this.nomEntreprise = nomEntreprise;
        }
    }
    La classe 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
    17
    package fr.argosi.administration;
     
    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.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
    public class InfoPersoAction extends Action {
     
        public ActionForward execute(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response){        
            return mapping.findForward("success");
        }
    }
    Si vous pouvez m'aider, je vous en serais très reconnaissant. Je continue cependant à rechercher de mon coté car ce problème est vraiment bloquant pour le projet :p.
    Merci d'avance.

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans le code du struts-config.xml que tu as posté, on ne voit pas le mapping de l'Action de path /enregistrer.
    Peux-tu le montrer ?
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Je ne l'ai pas encore mis en place. De toute manière, ça n'a pas encore une grande importance, à priori, dans la mesure où je n'arrive pas afficher ma page contenant le formulaire. Quand j'essaye d'aller dessus, j'ai le droit à une magnifique page ... vide de tout contenu (il n'y a absolument rien dans le code source).
    J'ai en contrepartie de ma page blanche, l'erreur que je vous ai cité ci dessus.

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Il me semble qu'on a ce style de message d'erreur quand on oublie de définir une classe en public.
    Or, dans ton cas, InfoPersoForm est bien définie comme public :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class InfoPersoForm extends ActionForm
    Donc, je ne vois pas pourquoi tu as ce message.
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre actif Avatar de coco62
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 237
    Points : 278
    Points
    278
    Par défaut
    La déclaration de enregistrer.do me paraît indispensable, sans cette déclaration comment fait il pour retrouver le bean associé ?

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Je suis d'accord avec coco62.
    Tu ne pourras pas accèder à la page jsp si tu ne crées pas l'Action de path /enregistrer et si tu ne la définis pas dans le struts-config.xml.
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Citation Envoyé par coco62 Voir le message
    La déclaration de enregistrer.do me paraît indispensable, sans cette déclaration comment fait il pour retrouver le bean associé ?
    Pour le moment, il est pas encore question de soumission de formulaire, de récupérer des informations et de traitement des données du formulaire. Le seul problème est que pour le moment, je n'ai aucun affichage, même pas un début (alors que le formulaire est définit dans 1 des 6 JSP appelé par Tiles à la construction). Alors qu'il me semblait, dans mes souvenirs toujours, que ce que j'ai fait à l'heure actuelle est suffisant pour avoir un test visuel.

    EDIT: Après un test de ce que ce tu as proposé, je n'ai toujours aucun résultat

  8. #8
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Pourrais-tu montrer le code complet de la jsp et le mapping de l'Action de path /enregistrer ?
    Modératrice Java - Struts, Servlets/JSP, ...

  9. #9
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Pourrais-tu montrer le code complet de la jsp et le mapping de l'Action de path /enregistrer ?
    Bien sur
    Ma JSP est quasiment complete, partie corps dans le template.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
     
    <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
    <html:form method="post" action="enregistrer.do" >
        <center>
            <table>
                <tr>
                    <td><label>Intitule </label></td>
                    <td><html:text property="intitule"/></td>
                </tr>
                <tr>
                    <td><label>Nom Entreprise</label></td>
                    <td><html:text property="nomEntreprise"/></td>
                </tr>
                <tr>
                    <td><html:submit value="valider"/></td>
                </tr>
            </table>
        </center>
    </html:form>
    Le template:
    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
     
    <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title><tiles:getAsString name="titre" /></title>
            <link rel="stylesheet" type="text/css" href="res/style/style.css" />
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
        </head>
        <body>
            <tiles:insert attribute="entete" />
            <div id="corps">
                <tiles:insert attribute="menuHaut" />
                <tiles:insert attribute="corps" />
            </div>
            <div id="MenuGauche">
                <tiles:insert attribute="menuGauche" />
            </div>
            <div id="bas">
                <tiles:insert attribute="pied" />
            </div>
        </body>
    </html>
    Dans le struts-config, j'ai rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            <action path="/enregistrer" 
                    name="formInfoPerso"
                    type="fr.argosi.administration.InfoPersoAction"
                    scope="request"
                    parameter="enregistrer">
                <forward name="success" path="infoPerso"/>
            </action>
            <action path="/infoPerso" 
                    name="formInfoPerso"
                    type="fr.argosi.administration.InfoPersoAction"
                    scope="request">
                <forward name="success" path="infoPerso"/>
            </action>
    Je suis pas convaincu de mon /enregistrer...

  10. #10
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Et le message d'erreur est toujours le même ?

    C'est vraiment bizarre parce que, comme je te l'ai dit précédemment, le message d'erreur que tu as apparaît normalement quand on oublie de mettre le mot "public" devant la classe.

    C'est comme si tu avais défini la classe InfoPersoForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class InfoPersoForm extends ActionForm
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class InfoPersoForm extends ActionForm
    Or, d'après le code que tu as posté, ce n'est pas le cas.
    Donc, je ne comprends pas ce qui cloche.

    A part ça, une petite remarque concernant le mapping de tes deux Actions :
    comme tu n'as pas encore implémenté de méthode validate dans ton ActionForm, tu devrais ajouter validate="false" car par défaut, il est égal à true et quand celui-ci est égal à true, on est sensé ajouter l'attribut input pour y coder la page vers laquelle on veut rediriger en cas d'erreur de validation.

    Sinon, au cas où, es-tu sûr d'avoir la bonne version du struts.jar ?
    Apparemment, tu utilises Struts 1.2 non ?
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    comme tu n'as pas encore implémenté de méthode validate dans ton ActionForm, tu devrais ajouter validate="false" car par défaut, il est égal à true et quand celui-ci est égal à true, on est sensé ajouter l'attribut input pour y coder la page vers laquelle on veut rediriger en cas d'erreur de validation.

    Sinon, au cas où, es-tu sûr d'avoir la bonne version du struts.jar ?
    Apparemment, tu utilises Struts 1.2 non ?
    J'ai pris en compte tous les points cités ci dessus et fait quelques bidouillages et ça marche maintenant Merci beaucoup à vous 2 c_nvy et coco62.

    J'explique le problème si jamais ca venait à arriver à d'autres. J'utilise la dernière version stable de Struts 1 (1.3.8) donc il a fallut que je mette à jour toutes les DTD de mes documents struts-config, validator-rules et tiles-def.
    Mais le problème venait surtout, à mon avis, d'un problème de configuration du build path.
    Sur le projet, on sépare les classes Java "normales", des ressources, des fichiers de tests Unitaires; or tous étaient compilés dans le même dossier de sortie. J'ai donc séparé chacune de ses parties dans 3 dossiers de sortie différents.

    Merci encore

  12. #12
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    C'est cool que ça fonctionne enfin.

    Effectivement, le passage en Struts 1.3.8 nécessite quelques modifs.
    Pour info, celles-ci sont très bien décrites dans les StrutsUpgradeNotes.

    Bon courage pour la suite.
    Modératrice Java - Struts, Servlets/JSP, ...

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/01/2007, 13h46
  2. Réponses: 2
    Dernier message: 02/01/2007, 11h19
  3. pb avec invoke de java.lang.reflect.
    Par sebastien2222 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 28/04/2006, 13h33
  4. Réponses: 2
    Dernier message: 30/09/2005, 14h52
  5. Réponses: 10
    Dernier message: 23/11/2004, 18h14

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