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 :

Cannot retrieve mapping for action


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut Cannot retrieve mapping for action
    Bonjour à tous,

    Je découvre la programmation en java à l aide des jsp. Abordant le chapitre Struts, je rencontre un problème pour leurs utilisations.

    Quand je cherche à acceder à ma jsp principal l'erreur suivante s'affiche.

    org.apache.jasper.JasperException: Cannot retrieve mapping for action: "/enregistrement"
    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)
    Je cherche depuis bientôt 2 jours mais je n ai pas trouvé de solutions pour résoudre mon problème.

    Voici les différents fichiers de mon application:
    struts-config.xml:

    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE struts-config PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
              "http://struts.apache.org/dtds/struts-config_1_3.dtd">
     
    <struts-config>
    	<form-beans>
    		<form-bean name="EnregistrementForm" type="monapp.EnregistrementForm"/>
    	</form-beans>
    	<action-mappings>
    		<action path="/monstruts" type="monapp.EnregistrementAction" name="EnregistrementForm" input="/enregistrement.jsp">
    			<forward name="ok" path="/ok.html"/>
    			<forward name="echec" path="/echec.html"/>
    		</action>
    	</action-mappings>
    </struts-config>
    web.xml
    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    	xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    	version="2.4">
        <display-name>JavaBeans</display-name>
        <description>
         Dcouverte des JavaBeans
        </description>
     
        <!-- Action Servlet Configuration -->
        <servlet>
        	<servlet-name>action</servlet-name>
        	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        	<init-param>
        		<param-name>config</param-name>
        		<param-value>/WEB-INF/struts-config.xml</param-value>
        	</init-param>
        	<load-on-startup>1</load-on-startup>
        </servlet>
     
        <!-- Action Servlet Mapping -->
        <servlet-mapping>
        	<servlet-name>action</servlet-name>
        	<url-pattern>*.do</url-pattern>
        </servlet-mapping>
     
        <!-- Struts Tag Library Descriptors -->
        <taglib>
        	<taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
        	<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
        </taglib>
        <taglib>
        	<taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
        	<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
        </taglib>
        <taglib>
        	<taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
        	<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
        </taglib>
    </web-app>

    Ces 2 fichiers se trouvent sous WEB-INF.

    Ensuite j ai 2 classes java:

    EnregistrementForm.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
    package monapp;
    import org.apache.struts.action.*;
     
    public class EnregistrementForm extends ActionForm {
     
    	String Nom;
    	String Pass;
    	String PassConfirm;
     
    	String getNom(){return Nom;}
    	String getPass(){return Pass;}
    	String getPassConfirm(){return PassConfirm;}
     
    	public void setNom(String Nom){this.Nom = Nom;}
    	public void setPass(String Pass){this.Pass = Pass;}
    	public void setPassConfirm(String PassConfirm){this.PassConfirm = PassConfirm;}
     
    }
    et EnregistrementAction.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
    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
    package monapp;
     
    import org.apache.struts.action.*;
    import javax.servlet.http.*;
    import java.sql.*;
    import java.io.*;
     
    //EnregistrementAction hrite de Struts Action
    public class EnregistrementAction extends Action{
     
    	//La mthode perform vient de Struts 1.0, remplace par la mthode exectue
    	//(gestion d'exception supplmentaire) de Struts 1.1
    	public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res){
     
    		//Casting de EnregistrementForm en tant qu'objet form
    		EnregistrementForm rf = (EnregistrementForm) form;
    		String nom = rf.getNom();
    		String pass = rf.getPass();
    		String passConfirm = rf.getPassConfirm();
     
    		//Implmentation de la logique mtier (vrification que les 2 mots de passes sont identiques et insertion dans la base de donnes)
    		if(pass.equals(passConfirm)){
    			//Chargement du pilote JDBC
    			try{Class.forName("org.gjt.mm.mysql.Driver");}
    			catch(java.lang.ClassNotFoundException e){
    				System.out.println("Pilote JDBC non trouv!");
    			}
    			try{
    				//connexion  la base de donnes
    				String url = "jdbc:mysql://localhost/madb?user=root&password=mysqlweb";
    				Connection con;
    				con = DriverManager.getConnection(url);
     
    				//Prparation et excution de la requte sql
    				PreparedStatement p = con.prepareStatement("insert into matable(nom, pass) values (?,?)");
    				p.setString(1, nom);
    				p.setString(2, pass);
    				ResultSet r = p.executeQuery();
    				p.close();
    			}//fin du try connexion  la base
    			// Renvoie l'exception en cas d'erreur base ou sql
    			catch(SQLException ex){
    				System.out.println("Erreur base de donnes");
    				System.out.println("Message: "+ ex.getMessage());
    				System.out.println("Mesasge: "+ ex.getSQLState());
    				System.out.println("Message: "+ ex.getErrorCode());
    			}
     
    			//Appel de l'objet ActionMapping pour envoyer vers le fichier ok.html
    			return mapping.findForward("ok");
    		}
    		else{
    			//Appel ActionMapping pour envoyer vers le fichier echec.html si le mot de passe de confirmation n'est pas le mme
    			return mapping.findForward("echec");
    		}
    	}
    }
    Ces 2 classes se trouvent sous le package monapp.

    Et pour finir 1 fichier jsp pour la saisie de l'information et 2 pages html pour retourner le résultat de l'opération.

    enregistrement.jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
     
    <html:form action="enregistrement">
    Nom:<html:text property="nom"/><br>
    Entrez le mot de passe:<html:password property="pass"/><br>
    Entrez le mot de passe  nouveau:<html:password property="passConfirm"/><br>
    <html:submit value="Enregistrement"/>
    </html:form>
    ok.html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <html>
    	<head>
    		<title>Ok</title>
    	</head>
    	<body>
    		Enregistrement r&eacute;ussi !
    		<br><a href="enregistrement.jsp">Enregistrer un autre membre</a>
    	</body>
    </html>
    et echec.html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <html>
    	<head>
    		<title>Echec</title>
    	</head>
    	<body>
    		Echec de l'enregistrement
    		<br><a href="enregistrement.jsp">Enregistrer un autre membre</a>
    	</body>
    </html>
    J'utilise les librairies struts 1.3.8 donc je ne sais pas si tous mes DOCTYPE sont corrects enfin il me semble.

    Merci aux bonnes âmes qui se pencheront sur mon problème.

  2. #2
    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
    Bonjour,

    A mon avis, tu regleras ton probleme dans un premier temps en remplacant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:form action="enregistrement">
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <html:form action="monstruts.do">
    Pourrais tu mettres les balises [CODE] pour encadré tout le code que tu as mis, il n'en sera que plus lisible.

  3. #3
    Membre actif
    Profil pro
    Developpeur
    Inscrit en
    Avril 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Avril 2004
    Messages : 160
    Points : 212
    Points
    212
    Par défaut
    Ben c'est normal. Dans ton struts-config, il n y'a pas d'action avec un path="enregistrment"

    et dans ta page jsp tu utilise:
    <html:form action="enregistrement">

    je pense que tu devrais mettre monstruts au lieu de enregistrement selon ton struts-config.

  4. #4
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Voilà j ai modifié le code en mettant monstruts à la place de enregistrement et maintenant j ai une autre erreur qui vient il semblerait qu il ne trouve pas de méthode get() pour le paramètre Nom... Pourtant il me semble qu il a été déclaré correctement dans la classe EnregistrementForm.java!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    javax.servlet.ServletException: No getter method for property: "Nom" of bean: "monapp.EnregistrementForm"
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    	org.apache.jsp.enregistrement_jsp._jspService(enregistrement_jsp.java:75)
    	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)
    Mais je dois surement m être trompé pour que cela ne fonctionne pas...

  5. #5
    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
    pourquoi pas dans ton ActionForm, mettre tes attributs en minuscule comme dans ta jsp pour qu'il puisse faire la correspondance correctement.

  6. #6
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Je viens d'essayer mais ça ne change rien... J ai recompilé ma classe java et j'ai tjs la meme erreur...

    J'ai cette configuration maintenant:

    enregistrement.jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
     
    <html:form action="monstruts.do">
    Nom:<html:text property="nom"/><br>
    Entrez le mot de passe:<html:password property="pass"/><br>
    Entrez le mot de passe  nouveau:<html:password property="passConfirm"/><br>
    <html:submit value="Enregistrement"/>
    </html:form>
    et EnregistrementForm.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
    package monapp;
    import org.apache.struts.action.*;
     
    public class EnregistrementForm extends ActionForm {
     
    	String nom;
    	String pass;
    	String passConfirm;
     
    	String getNom(){return nom;}
    	String getPass(){return pass;}
    	String getPassConfirm(){return passConfirm;}
     
    	public void setNom(String nom){this.nom = nom;}
    	public void setPass(String pass){this.pass = pass;}
    	public void setPassConfirm(String passConfirm){this.passConfirm = passConfirm;}
     
    }

  7. #7
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Et quel est ton mesage d'erreur maintenant?

  8. #8
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Tjs le meme...
    javax.servlet.ServletException: No getter method for property: "nom" of bean: "monapp.EnregistrementForm"
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    org.apache.jsp.enregistrement_jsp._jspService(enregistrement_jsp.java:75)
    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)

  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
    et ben, j'ai beau lire ton code, je vois pas ou peut etre l'erreur. D'un autre coté, j'ai pas le temps de le tester. Je ne saurais que te conseiller d'utiliser le mode debug en posant un breakpoint sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void setNom(String nom){this.nom = nom;}
    Pour voir si tu passes par la quand tu valides ton formulaire, et voir ou est levé ton exception.

    c'est du chipotage mais préfére dans tes JSP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>

  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
    Ajoute le modificateur public sur les getters dans l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public String getNom(){return nom;}
    	public String getPass(){return pass;}
    	public String getPassConfirm(){return passConfirm;}

  11. #11
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Super il fallait que je rajoute l'instruction public devant mes méthodes pour que cela fonctionne...
    Il les considère comment si tu ne spécifies rien? (private, protected...)

  12. #12
    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
    Ah oui, j'avais meme pas vu cette erreur

    Pour ta question, la reponse est ici :
    http://java.developpez.com/faq/java/...motsClesPublic

  13. #13
    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
    si tu ne mets pas de modificateur, la méthode n'est exécutable que par les classes du même package.

  14. #14
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Merci pour l info...

    Je vous embête encore mais cela ne fonctionne tjs pas comme je pensais...
    J arrive à accéder à ma jsp pour la saisie des informations mais malheureusement quand je fais envoyer il me redirige vers un uri un peu bizarre... Logiquement il devrait soit m afficher la page ok.html ou echec.html! Ce n 'est pas vraiment le cas...

    Uri créé:

    http://localhost:8080/monstruts/mons...4875663FE102E5

  15. #15
    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
    Comme tu utilises la version 1.3.8 de Struts, il faudrait modifier la méthode perform en méthode execute.

    Et sinon, il faudrait modifier le code de la méthode execute, car telle que tu l'as codé, dans le cas où tu passes dans un catch, tu ne fais pas de return.

  16. #16
    Nouveau membre du Club
    Profil pro
    Webmaster
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup pour ton aide... La grande classe!

  17. #17
    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
    De rien.
    Mais n'oublie pas que je n'étais pas la seule à intervenir dans la discussion.

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

Discussions similaires

  1. Message There is no Action mapped for action name
    Par tyzef dans le forum Struts 2
    Réponses: 17
    Dernier message: 15/09/2014, 13h59
  2. [Struts] Cannot retrieve definition for form bean
    Par Diablo_22 dans le forum Struts 1
    Réponses: 2
    Dernier message: 10/09/2009, 12h24
  3. Réponses: 5
    Dernier message: 03/07/2007, 14h06
  4. Cannot retrieve mapping for action /dologin
    Par gentil dans le forum Struts 1
    Réponses: 9
    Dernier message: 29/03/2007, 14h41
  5. Cannot retrieve definition for form bean:
    Par Baptiste Wicht dans le forum Struts 1
    Réponses: 11
    Dernier message: 10/10/2006, 19h27

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