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 :

Une page jsp pour deux actions


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut Une page jsp pour deux actions
    Bonjour,

    Je suis débutante et j'esaie de réaliser une application avec struts et mysql. J'ai la page table_pays.jsp qui affiche toutes les lignes de la table PAYS (la ligne de la table est du type "id,nom") de ma base de données. Au bout de chaque ligne j'ai ajouté un lien "modifier" et un lien "supprimer" ainsi qu'à la fin du tableau un bouton "ajouter".

    Maintenant voila je se que je souhaiterai faire. Je voudrais que quand on appuie sur le bouton "modifier" on arrive sur la page pays.jsp avec le nom du pays choisi écrit dans le champ nom. Si on appuie sur le bouton "ajouter" on arrive sur la meme page mais cette fois le champ est vide.

    J'ai déjà essayer pas mal de chose mais rien n'a fonctionné. L'idée c'est de rajouter un attribut id à l'url. ensuite dans mon action InfoPaysAction, si l'id est egal à zero (on a appuié sur le bouton "ajouter") alors dans ma requete je retourne un pays avec un nom vide. Sinon je retourne le pays correspondant à l'id de l'url.

    Mais quand j'execute mon code j'ai l'erreur suivante :
    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
     
    ype 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: /vues/pays.jsp(19,68) Symbole égal (equal) attendu
    	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39)
    	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:405)
    	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:86)
    	org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:193)
    	org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:143)
    	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1328)
    	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1564)
    	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1793)
    	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1060)
    	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1367)
    	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1564)
    	org.apache.jasper.compiler.Parser.parse(Parser.java:126)
    	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:211)
    	org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:146)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
    	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
    	org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:560)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:209)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    	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)
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.9.
    Ca vient de ma façon de mettre la valeur du nom du pays dans le champ, mais je ne sais pas comment régler le problème. J'ai vu des exemples qui utilisent l'écriture ${infoPays.nom} mais si je fais ça alors tomcat hurle en disant que le bean infoPays n'est pas définit dans le scope.


    Le deuxième probleme, c'est que du cout, je dois gérer deux actions différentes sur un même bouton. Soit faire appel à l'action AjoutPaysAction soit à l'action ModifierPaysAction. Comment puis je faire ca? Pour l'instant mon bouton ne gère que l'ajout, ne sachant pas comment je peux le parametrer.

    Voici le code de la page table_paus.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
     
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
     
    <html>
    	<head>
    		<title>Table pays</title>
    	</head>
    	<body>
    		<h2>Table PAYS</h2>
    		<hr>
    		<html:errors/>
    		<table border="1">
    		       <tr>
    				<td>id</td>
    				<td>nom</td>
    				<td></td>
    				<td></td>
    			</tr>
    			<logic:iterate id="item" name="pays">
    				<tr>
    					<td><bean:write name="item" property="id"/></td>
    					<td><bean:write name="item" property="nom"/></td>
    					<td><a href="pays.do?id=<bean:write name="item" property="id"/>">modifer</a></td>
    					<td><a href="supprimerPays.do?id=<bean:write name="item" property="id"/>">Suppirmer</a></td>
    				</tr>
    			</logic:iterate>
    		</table>
    		<p><br/>
    		<html:button property="btnAjouter" value="Ajouter" onclick="javascript:location.href='pays.do?id=0'"/>
    	</body>
    </html>
    voici le code de la page pays.jsp (celle ou l'erreur apparait):
    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
     
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
     
    <html>
    	<meta http-equiv="pragma" content="no-cache">
    	<head>
    		<title>Pays - formulaire</title>
    	</head>
     
     
    	<body>
    		<center>
    			<h2>Gerer un pays</h2>
    			<hr>
    		  	 <html:form action="/paysValide">
    				<table>
    					<tr>
    						<td>Nom du pays</td>
    						<td><html:text property="nom" value="<bean:write name="infoPays" property="nom"/>"/></td>
    					</tr>
    					<tr>
    						<td><html:submit value="Ajouter"/></td>
     
    					</tr>
    				</table>
    			</html:form>
    		</center>
    	</body>
    </html>
    Code de l'action InfoPaysAction.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
     
    import java.io.IOException;
    import java.util.Collection;
     
    import javax.servlet.ServletException;
    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 InfoPaysAction extends Action{
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws IOException,ServletException {
     
    		PaysBean p = new PaysBean();
    		int find = p.findByPrimaryKey(Integer.parseInt(request.getParameter("id")));
    		if(find == 0){
    			p.setNom("coucou");
    		}
    		request.setAttribute("infoPays", p);
    		return mapping.findForward("pays");
    	}
     
    }
    voici le code du fichier 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
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
     
    <!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
     
    <struts-config>
      <form-beans>
        <form-bean
           name="frmConnection"
           type="ConnectionBean"
        />
        <form-bean
           name="frmPersonne"
           type="PersonneBean"
        />
        <form-bean
           name="frmVille"
           type="VilleBean"
        />
        <form-bean
           name="frmPays"
           type="PaysBean"
        />
        <form-bean
           name="frmOperation"
           type="OperationBean"
        />
    </form-beans>
     
    <action-mappings>
      <action
         path="/connectionValide"
         name="frmConnection"
         scope="session"
         validate="true"
         input="/erreursConnection.do"
         type="ConnectionAction">
        <forward name="information" path="/information.do"/>
        <forward name="echec" path="/echecConnection.do"/>
        <forward name="administration" path="/administration.do"/>
      </action>
     
      <action
         path="/operationValide"
         name="frmOperation"
         scope="session"
         validate="true"
         input="/echecOperation.do"
         type="OperationAction">
        <forward name="succesOperation" path="/succesOperation.do"/>
      </action>
     
      <action path="/affPays" type="PaysAction">
        <forward name="tablePays" path="/tablePays.do"/>
      </action>
     
      <action path="/infoPays" type="InfoPaysAction">
    	<forward name="pays" path="/pays.do"/>
      </action>
     
      <action path="/supprimerPays" type="SupprimerPaysAction">
    	<forward name="tablePays" path="/tablePays.do"/>
      </action>
     
      <action
         path="/paysValide"
         name="frmPays"
         scope="session"
         validate="true"
         input="/tablePays.do"
         type="AjoutPaysAction">
        <forward name="tablePays" path="/tablePays.do"/>
      </action>
     
     
      <action forward="/vues/echec_connection.jsp" path="/echecConnection"/>
      <action forward="/vues/information.jsp" path="/information"/>
      <action forward="/vues/connection.jsp" path="/connection"/>
      <action forward="/vues/administration.jsp" path="/administration"/>
      <action forward="/vues/table_ville.jsp" path="/tableVille"/>
      <action forward="/vues/table_pays.jsp" path="/tablePays"/>
      <action forward="/vues/table_personne.jsp" path="/tablePersonne"/>
      <action forward="/vues/pays.jsp" path="/pays"/>
      <action forward="/vues/ville.jsp" path="/ville"/>
      <action forward="/vues/personne.jsp" path="/personne"/>
      <action forward="/vues/operation.jsp" path="/operation"/>
      <action forward="/vues/echec_operation.jsp" path="/erreursOperation"/>
      <action forward="/vues/succes_operation" path="/succesOperation"/>
     
    </action-mappings>
    <message-resources parameter="ressources.personneressources"/>
    </struts-config>
     
     
    Merci de votre aide

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tout d'abord, dans la jsp table_pays.jsp, tu pourrais utiliser le tag html:link à la place de la balise <a> comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html:link action="pays" paramId="id" paramName="item" paramProperty="id">
       modifier
    </hml:link>
    <html:link action="supprimerPays" paramId="id" paramName="item" paramProperty="id">
       Supprimer
    </hml:link>
    Ensuite, pour afficher le nom du pays dans la page pays.jsp, au lieu de mettre un attribut value dans le tag html:text, tu peux initialiser la propriété nom du form-bean dans l'Action InfoPaysAction, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PaysBean paysBean = (PaysBean) form ;
    paysBean.setNom(nomDuPays) ;
    Pour que cela fonctionne, il faut spécifier le nom du form-bean dans le mapping de l'Action InfoPaysAction :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <action path="/infoPays" type="InfoPaysAction" name="frmPays" validate="false">
    	<forward name="pays" path="/pays.do"/>
      </action>
    Par contre, il y a quelque chose qui ne va pas.
    Apparemment, la classe PaysBean est à la fois une ActionForm et interroge la base de données.
    Normalement, ce devrait être deux classes distinctes.

    Sinon, lorsqu'on veut pouvoir réaliser plusieurs actions sur un même formulaire, on utilise généralement une DispatchAction ou une LookupDispatchAction.
    Pour plus d'infos, voir la FAQ.

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    bonjour,

    j'essaye de mettre en application se que vous m'avez dit. J'ai deux problèmes :
    le premier (si je garde une seule action sur le bouton "enregistrer" de la page pays.jsp) je n'ai toujours pas le champ nom rempli.

    Le deuxieme c'est si j'essaie de faire l'action multiple sur le bouton j'ai l'erreur suivante :
    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
     
     
    message
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception
     
    javax.servlet.ServletException: Missing message for key "bouton.ajouter"
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
    	org.apache.jsp.vues.pays_jsp._jspService(org.apache.jsp.vues.pays_jsp:93)
    	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:322)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    	org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1001)
    	org.apache.struts.action.RequestProcessor.processForward(RequestProcessor.java:560)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:209)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    	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)
     
    cause mère
     
    javax.servlet.jsp.JspExcep
    fichier 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
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
     
    <!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
     
    <struts-config>
      <form-beans>
        <form-bean
           name="frmConnection"
           type="ConnectionBean"
        />
        <form-bean
           name="frmPersonne"
           type="PersonneBean"
        />
        <form-bean
           name="frmVille"
           type="VilleBean"
        />
        <form-bean
           name="frmPays"
           type="PaysBean"
        />
        <form-bean
           name="frmOperation"
           type="OperationBean"
        />
    </form-beans>
     
    <action-mappings>
      <action
         path="/connectionValide"
         name="frmConnection"
         scope="session"
         validate="true"
         input="/erreursConnection.do"
         type="ConnectionAction">
        <forward name="information" path="/information.do"/>
        <forward name="echec" path="/echecConnection.do"/>
        <forward name="administration" path="/administration.do"/>
      </action>
     
      <action
         path="/operationValide"
         name="frmOperation"
         scope="session"
         validate="true"
         input="/echecOperation.do"
         type="OperationAction">
        <forward name="succesOperation" path="/succesOperation.do"/>
      </action>
     
      <action path="/affPays" type="PaysAction">
        <forward name="tablePays" path="/tablePays.do"/>
      </action>
     
      <action path="/infoPays" type="InfoPaysAction" name="frmPays" validate="false">
    	<forward name="pays" path="/pays.do"/>
      </action>
     
      <action path="/supprimerPays" type="SupprimerPaysAction">
    	<forward name="tablePays" path="/tablePays.do"/>
      </action>
     
      <action
         path="/paysValide"
         name="frmPays"
         scope="request"
         parameter="action"
         validate="true"
         input="/tablePays.do"
         type="ModifPaysAction">
        <forward name="tablePays" path="/tablePays.do"/>
      </action>
     
     <action path="/affVille" type="VilleAction">
        <forward name="tableVille" path="/tableVille.do"/>
      </action>
     
      <action path="/infoVille" type="InfoVilleAction">
    	<forward name="ville" path="/ville.do"/>
      </action>
     
      <action path="/supprimerVille" type="SupprimerVilleAction">
    	<forward name="tableVille" path="/tableVille.do"/>
      </action>
     
      <action
         path="/villeValide"
         name="frmVille"
         scope="session"
         validate="true"
         input="/tableVille.do"
         type="AjoutVilleAction">
        <forward name="tableVille" path="/tableVille.do"/>
      </action>
     
     
      <action path="/affPersonne" type="PersonneAction">
        <forward name="tablePersonne" path="/tablePersonne.do"/>
      </action>
     
      <action path="/infoPersonne" type="InfoPersonneAction">
    	<forward name="personne" path="/personne.do"/>
      </action>
     
      <action path="/supprimerPersonne" type="SupprimerPersonneAction">
    	<forward name="tablePersonne" path="/tablePersonne.do"/>
      </action>
     
      <action
         path="/personneValide"
         name="frmPersonne"
         scope="session"
         validate="true"
         input="/tablePersonne.do"
         type="AjoutVilleAction">
        <forward name="tablePersonne" path="/tablePersonne.do"/>
      </action>
     
      <action forward="/vues/echec_connection.jsp" path="/echecConnection"/>
      <action forward="/vues/information.jsp" path="/information"/>
      <action forward="/vues/connection.jsp" path="/connection"/>
      <action forward="/vues/administration.jsp" path="/administration"/>
      <action forward="/vues/table_ville.jsp" path="/tableVille"/>
      <action forward="/vues/table_pays.jsp" path="/tablePays"/>
      <action forward="/vues/table_personne.jsp" path="/tablePersonne"/>
      <action forward="/vues/pays.jsp" path="/pays"/>
      <action forward="/vues/ville.jsp" path="/ville"/>
      <action forward="/vues/personne.jsp" path="/personne"/>
      <action forward="/vues/operation.jsp" path="/operation"/>
      <action forward="/vues/echec_operation.jsp" path="/erreursOperation"/>
      <action forward="/vues/succes_operation" path="/succesOperation"/>
     
    </action-mappings>
    <message-resources parameter="ressources.personneressources"/>
    </struts-config>

    Le fichier InfoPaysAction.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
     
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    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 InfoPaysAction extends Action{
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws IOException,ServletException {
     
    		//on recupere le form-bean pour initialiser ces valeurs et les afficher dans la page pays.jsp
    		PaysBean paysBean = (PaysBean)form;
    		PaysBean p = new PaysBean();
     
    		int find = p.findByPrimaryKey(Integer.parseInt(request.getParameter("id")));
    		//l'id est pas trouve donc on initialise les champ &#136; vide
    		if(find == 0){
    			paysBean.setId(0);
    			paysBean.setNom("");
    		}
    		//le pays est trouve
    		else{
    			paysBean.setId(p.getId());
    			paysBean.setNom(p.getNom());
    		}
    		return mapping.findForward("pays");
    	}
     
    }
    fichier ModifPaysAction.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
    58
    59
    60
    61
    62
    63
     
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
    import org.apache.struts.actions.DispatchAction;
     
     
    public class ModifPaysAction extends DispatchAction{
     
    	protected Map getKeyMethodMap(){
    		Map map = new HashMap();
    		map.put("bouton.ajouter", "ajouter");
    		map.put("bouton.modifier", "modifier");
    		return map;
    	}
     
    	public ActionForward ajouter(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request, HttpServletResponse response){
    		//on recupere les donnees du bean paysBean	
    		PaysBean formulaire=(PaysBean)form;	
    		//on creer un objet PaysBean
    		PaysBean p = new PaysBean();
     
    		int ajoutPays = p.create(formulaire.getNom());
    		//le pays n'a pas &#142;t&#142; ajout&#142;
    		if(ajoutPays == 0){
    			ActionErrors erreurs = new ActionErrors();
    			erreurs.add("erreurBD", new ActionMessage("pays.erreur.bd"));
    			return mapping.findForward("tablePays");
    		}
     
    		//on recupere les donnees de la table
    		Collection<PaysBean> pays = p.getToutPays();
     
    		request.setAttribute("pays", pays);
    		return mapping.findForward("tablePays");
    	}
     
    	public ActionForward modifier(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request, HttpServletResponse response){
    		//on recupere les donnees du bean paysBean	
    		PaysBean formulaire=(PaysBean)form;	
    		//on creer un objet PaysBean
    		PaysBean p = new PaysBean();
     
    		p.modifier(formulaire.getId(),formulaire.getNom());
     
    		//on recupere les donnees de la table
    		Collection<PaysBean> pays = p.getToutPays();
     
    		request.setAttribute("pays", pays);
    		return mapping.findForward("tablePays");
    	}
    }
    le fichier table_pays.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
     
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
     
    <html>
    	<head>
    		<title>Table pays</title>
    	</head>
    	<body>
    		<h2>Table PAYS</h2>
    		<hr>
    		<html:errors/>
    		<table border="1">
    		       <tr>
    				<td>id</td>
    				<td>nom</td>
    				<td></td>
    				<td></td>
    			</tr>
    			<logic:iterate id="item" name="pays">
    				<tr>
    					<td><bean:write name="item" property="id"/></td>
    					<td><bean:write name="item" property="nom"/></td>
    					<td><html:link action="pays" paramId="id" paramName="item" paramProperty="id">modifer</html:link></td>
    					<td><html:link action="supprimerPays" paramId="id" paramName="item" paramProperty="id">Suppirmer</html:link></td>
    				</tr>
    			</logic:iterate>
    		</table>
    		<p><br/>
    		<html:button property="btnAjouter" value="Ajouter" onclick="javascript:location.href='pays.do?id=0'"/>
    	</body>
    </html>

    fichier pays.sjp
    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
     
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
     
    <html>
    	<meta http-equiv="pragma" content="no-cache">
    	<head>
    		<title>Pays - formulaire</title>
    	</head>
     
     
    	<body>
    		<center>
    			<h2>Gerer un pays</h2>
    			<hr>
    		  	 <html:form action="/paysValide">
    				<table>
    					<tr>
    						<td>Nom du pays</td>
    						<td><html:text name="frmPays" property="nom"/></td>
    					</tr>
    					<tr>
    						<td><html:submit value="Enregistrer" property="action">
    								 <logic:equal name="frmPays" property="id" value="0">
    								 	      <bean:message key="bouton.ajouter"/>
    						                </logic:equal>
    								<logic:notequal name="frmPays" property="id" value="0">
    										<bean:message key="bouton.modifier"/>
    								</logic:notequal>
    								</html:submit></td>
     
    					</tr>
    				</table>
    			</html:form>
    		</center>
    	</body>
    </html>

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Apparemment, tu n'as pas défini la clé bouton.ajouter dans le fichier des messages.

    Sinon, dans ton Action ModifPaysAction, tu as implémenté la méthode getKeyMethodMap(), il faut donc que ton Action hérite de LookupDispatchAction et non de DispatchAction.

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    j'ai ajouter les bouton dans mon fichier de message. et effectivement j'ai maintenant ma page qui s'affiche. Mais si j'appuie sur le bouton "Enregistre" j'ai l'erreur

    javax.sdervlet.ServletException : Action[/paysValide] missing resource 'Enregistrer' in key method map

    Par contre que j'apuye sur le bouton ajouter ou sur le lien modifier le champ de mon formulaire et toujours vide. Je ne vois pas d'ou ca vient. Je pense que c'est par rapport au champ "name" parce que je ne sais pas si je dois mettre le meme temps que le xml c'est à dire "frmPays" ou bien retourner le formulaire initialiser dans mon action "InfoPaysBean" mais je sais pas le faire (j'ai essayer avec un setAttribute mais ca n'a rien donné).

    Merci de votre aide.

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je pense que ton problème vient de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		PaysBean paysBean = (PaysBean)form;
    		PaysBean p = new PaysBean();
    Comme je te l'ai dit plus haut, il faut créer deux classes distinctes.
    La classe qui hérite de l'ActionForm dans laquelle tu définis seulement les propriétés du formulaire avec getter et setter et une classe qui interroge la base de données.

    Peux-tu montrer le code de la classe PaysBean ?

    EDIT : il faut enlever l'attribut value="Enregistrer" du tag html:submit.

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    voici la classe PaysBean
    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
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Collection;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionMessage;
     
    public class PaysBean extends ActionForm{
     
    	private int id;
    	private String nom;
     
    	public PaysBean(){
     
    	}
     
    	public PaysBean(int id, String nom) {
    		super();
    		this.id = id;
    		this.nom = nom;
    	}
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
     
    	/* cherche un pays par rapport a son identifiant
    	 * si le pays est trouve alors on retourne son identifiant
    	 * sinon on retourne zero
    	 */
    	public int findByPrimaryKey(int identifiant){
    		String selectStatement = "SELECT * FROM  PAYS WHERE id=?";
    	    try{
    	    	Connection connexionBD = this.connection();
    	    	PreparedStatement ps = connexionBD.prepareStatement(selectStatement);
    	    	ps.setInt(1, identifiant);
    	    	ResultSet rs = ps.executeQuery();
    	    	if(rs.next()){
    	    		this.id = rs.getInt(1);
    	    		this.nom = rs.getString(2);
    	    		connexionBD.close();
    	    		ps.close();
    	    		return(id);
    	    	}
    	    	connexionBD.close();
        		ps.close();
    	    }catch (SQLException s){
    	        System.out.println(s+"SQL code does not execute.");
    	    }
    		return(0);
    	}
     
    	/* ajout d'un pays
    	 * si le pays est ajoute alors on retourne son identifiant
    	 * sinon on retourne zero
    	 */
    	public int create( String nom ){
    		int idLast = getLastId() + 1;
    		String selectStatement = "INSERT INTO PAYS VALUES ('" + idLast + "','" +nom+"');";
    	    try{
    	    	Connection connexionBD = this.connection();
    	    	PreparedStatement ps = connexionBD.prepareStatement(selectStatement);
    	    	ps.executeUpdate();
    	    		this.id = idLast;
    	    		this.nom = nom;
    	    		connexionBD.close();
    	    		ps.close();
    	    		return(idLast);
    	    }catch (SQLException s){
    	        System.out.println(s+"SQL code does not execute.");
    	    }
    		return(0);
    	}
     
     
    	//permet de supprimer un pays
    	public void remove(int identifiant){
    		String removeStatement = "DELETE FROM PAYS WHERE id = '" + identifiant + "';";
    		try{
    			Connection connexionBD = this.connection();
    	    	PreparedStatement ps = connexionBD.prepareStatement(removeStatement);
    	    	ps.executeUpdate();
    	    	this.id = 0;
        		this.nom = null;
    	    	ps.close();
    	    	connexionBD.close();
    		}catch(Exception s){
    			System.err.println(s+"SQL code does not execute.");
    		}
    	}
     
     
    	//permet de modifier un pays
    	public void modifier(int identifiant, String nom ){
    		String updateStatement = "UPDATE PAYS set nom='" +nom+"' WHERE id='"+identifiant+"';";
    		 try{
    		    	Connection connexionBD = this.connection();
    		    	PreparedStatement ps = connexionBD.prepareStatement(updateStatement);
    		    	ps.executeUpdate();
    		    		this.id = identifiant;
    		    		this.nom = nom;
    		    		connexionBD.close();
    		    		ps.close();
    		    }catch (SQLException s){
    		        System.out.println(s+"SQL code does not execute.");
    		    }
    	}
     
     
    	//permet d'avoir tout les pays
    	public Collection<PaysBean> getToutPays(){
    		ArrayList<PaysBean> result = new ArrayList<PaysBean>();
    		String selectStatement = "SELECT * FROM PAYS";
    		try{
    			Connection connexionBD = this.connection();
    	    	PreparedStatement ps = connexionBD.prepareStatement(selectStatement);
    	    	ResultSet rs = ps.executeQuery();
    	    	while(rs.next()){
    	    		PaysBean p = new PaysBean(rs.getInt(1), rs.getString(2));
    	    		result.add(p);
    	    	}
    		}catch(SQLException s){
    			System.out.println(s+"SQL code does not execute.");
    		}
    		return result;
    	}
     
    	//permet d'avoir le plus grand id utilise
    	private int getLastId(){
    		String selectStatement = "SELECT MAX(id) FROM PAYS";
    		try{
    			Connection connexionBD = this.connection();
    	    	PreparedStatement ps = connexionBD.prepareStatement(selectStatement);
    	    	ResultSet rs = ps.executeQuery();
    	    	if(rs.next()){
    	    		int idlast = rs.getInt(1);
    	    		connexionBD.close();
    	    		ps.close();
    	    		return(idlast);
    	    	}
    	    	connexionBD.close();
        		ps.close();
    	    }catch (SQLException s){
    	        System.out.println(s+"SQL code does not execute.");
    	    }
    		return(0);
    	}
     
    	//permet de se connecter a la base de donnees
    	private Connection connection(){
    		Connection con = null;
    		String url = "jdbc:mysql://localhost/";
    		String db = "banque";
    		String driver = "com.mysql.jdbc.Driver";
    		String user = "";
    		String pass = "";
    		try{
    			Class.forName(driver).newInstance();
    			 con = DriverManager.getConnection(url+db,user,pass);
    			return(con);
    		}
    		catch (Exception e){
    			System.out.println("ERREUR NULL BORDEL");
    			e.printStackTrace();
    			return(null);
    		}
    	}
     
     
    	//fonction validate
    	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    		// gestion des erreurs
    		ActionErrors erreurs = new ActionErrors();
    		// le nom doit tre non vide
    		if (nom == null || nom.trim().equals("")) {
    			erreurs.add("nomvide", new ActionMessage("pays.formulaire.nom.vide"));
    		}
    		// on rend la liste d'erreurs
    		return erreurs;
    	}
    }

  8. #8
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Comme je te l'ai dit plus haut, il te faut créer deux classes distinctes.
    Toutes les méthodes dans lesquelles tu interroges la base de données doivent être dans une autre classe que l'ActionForm.

    Tu devrais donc avoir par exemple une ActionForm PaysForm avec pour propriétés id et nom, les getters et setters correspondants et la méthode validate et une classe PaysBean avec les constructeurs et les méthodes qui accèdent à la base de données.

    Ainsi, dans ton Action, tu ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	PaysForm paysForm= (PaysForm) form;
    	PaysBean paysBean = new PaysBean();
     
    	int find = paysBean.findByPrimaryKey(Integer.parseInt(request.getParameter("id")));
    	//l'id est pas trouve donc on initialise les champ ˆ vide
    	if(find == 0){
    		paysForm.setId(0);
    		paysForm.setNom("");
    	}
    	//le pays est trouve
    	else{
    		paysForm.setId(paysBean.getId());
    		paysForm.setNom(paysBean.getNom());
    	}
    Et là, je pense que ça devrait mieux fonctionner.

  9. #9
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    j'ai corriger ce que vous m'avez dit. J'ai toujours rien dans mon champ de plus sur le bouton il y a ecrit : "<logic:equal name=" et acote du bouton "ajouter modifer"> "


    dans le fichier struts-confg.xml
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form-bean
           name="frmPays"
           type="PaysForm"
        />
    A la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form-bean
           name="frmPays"
           type="PaysBean"
        />
    voici mon fichier de ressource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    connection.formulaire.login.vide=<li>Vous devez indiquer un login</li>
    connection.formulaire.pw.vide=<li>Vous devez indiquer un mot de passe</li>
    connection.formulaire.connectionIncorrecte=<li>Cette personne n'existe pas</li>
    pays.formulaire.nom.vide=<li>Vous devez indiquez le nom du pays</li>
    pays.erreur.bd=<li>Erreur avec la BD : le pays n'a pas été ajouté</li>
    errors.header=<ul>
    errors.footer=</ul>
     
    bouton.ajouter=ajouter
    bouton.modifier=modifier

  10. #10
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Dans la jsp pays, tu as oublié d'ajouter la directive taglib qui pointe sur la tld struts-logic.tld et tu as codé logic:notequal au lieu de logic:notEqual.

  11. #11
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    oui ca regle le probleme d'affichage mais je n'ai toujours pas la valeur de mon pays dans le champ quand je veux modifier et du coup il me met toujours le bouton ajouter au lieu du bouton modifier.

    c'est très bizard. J'ai fait plusieurs essaie et en fait, au debut de ma classe PaysForm, si je me mets des valeurs par défaut c'est cela qui est afficher.
    Si dans ma fonction setNom(String nom){ this.nom = "coucou";} c'est la valeur par défaut qui est quand même affiché. pourtant mes classes java son correcte. est ce que ca peut venir de mon struts-config.xml?

    le link pour modifer est <html:link action="infoPays" paramId="id" paramName="item" paramProperty="id">modifier</html:link>

    Merci de votre aide

Discussions similaires

  1. Réécriture de l'URL pour passer d'une page JSP vers une autre
    Par meriem meryoma dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 20/04/2013, 08h53
  2. Attribut en session pour afficher dans une page JSP
    Par stanilas dans le forum Struts 2
    Réponses: 1
    Dernier message: 24/09/2012, 14h08
  3. detecter une action sur une page jsp interprétée
    Par scolopendra dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 11/02/2009, 14h47
  4. appeler une action a partir d'une page jsp
    Par air75 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/07/2008, 16h03
  5. Réponses: 2
    Dernier message: 26/04/2007, 09h06

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