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

Servlets/JSP Java Discussion :

Problème avec request.setAttribute()


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 12
    Points
    12
    Par défaut Problème avec request.setAttribute()
    Bonjour,

    Je dois réaliser une application de gestion de compte (ajout opérations, consultation du solde et de l'historique).

    lorsque je saisie un crédit ou un débit je reçoit le message d'erreur suivant:
    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
     
    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: /operation.jsp(3,0) 
    	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
    	org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1200)
    	org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1155)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
    	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2388)
    	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2394)
    	org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
    	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2338)
    	org.apache.jasper.compiler.Generator.generate(Generator.java:3374)
    	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:210)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:306)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
    	org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
    	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	pack.ServletRequete.doGet(ServletRequete.java:24)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    Qui porte apparement sur la ligne suivante de mon fichier operaion.jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:useBean id="operation" scope="session" class="pack.Compte"/>
    voila comment ce deroule mon appli.
    A partir de accueil.jsp, je choisi de saisir un credit ou un debit

    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
     
    <%@page language="java" contentType="text/html"%>
     
    <form action = "compte" method="get">
       <table border="1">
        <tr>  <th colspan="2"> Nouveau Cr&eacute;dit</th></tr>   
        <tr>  <td>Cr&eacute;dit    </td>            <td><input type="texte" name="credit"/>   </td></tr>
        <input type="hidden" name="req" value="credit"/>
        <tr>  <td colspan="2"> <input type="submit" value="Valider"/></td></tr>
       </table>
    </form>
     
    <form action = "compte" method="get">
       <table border="1">
        <tr>  <th colspan="2"> Nouveau D&eacute;bit</th></tr>   
        <tr>  <td>D&eacute;bit     </td>            <td><input type="texte" name="debit"/>   </td></tr>
        <input type="hidden" name="req" value="debit"/>
        <tr>  <td colspan="2"> <input type="submit" value="Valider"/></td></tr>
       </table>
    </form>
    web.xml redirige le tout vers ServletRequete.class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     <web-app> 
     
      <servlet> 
          <servlet-name>compte</servlet-name> 
          <servlet-class>pack.ServletRequete</servlet-class> 
       </servlet> 
     
      <servlet-mapping> 
          <servlet-name>compte</servlet-name> 
          <url-pattern>/compte</url-pattern> 
       </servlet-mapping> 
     
    </web-app>
    Voici le code de ServletRequete.class
    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
     
    package pack;
     
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    public class ServletRequete extends HttpServlet {
    	@Override
    	public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    		HttpSession session = request.getSession(false);
    		if (session==null) 
    			request.getRequestDispatcher("login.jsp").forward(request,response);
    		else {
    			Compte compte=(Compte)session.getAttribute("compte");
    			String requestType = request.getParameter("req");
    			if (requestType.equals("credit")){
    				int credit = Integer.parseInt(request.getParameter("credit"));
    				compte.ajoutOperation("credit", credit);
    				request.setAttribute("operation", compte);
    				request.getRequestDispatcher("operation.jsp").forward(request,response);
    			}
    			else if (requestType.equals("debit")){
    				int debit = Integer.parseInt(request.getParameter("debit"));
    				compte.ajoutOperation("debit", debit);
    				request.setAttribute("operation", compte);
    				request.getRequestDispatcher("operation.jsp").forward(request,response);
    			}
    			else if (requestType.equals("solde")){
    				request.getRequestDispatcher("solde.jsp").forward(request,response);
    			}
    		}
    	}
    }
    le code de operation.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
     
    <%@page language="java" contentType="text/html"%>
    <jsp:useBean id="pendule" scope="page" class="pack.Pendule"/> 
    <jsp:useBean id="operation" scope="session" class="pack.Compte"/>
    <%@page import="pack.Compte" %>
    <html>
    <body>
     
    OPERATION
     
    <hr/>
    Nouveau <jsp:getProperty name="operation" property="typeOperation"/> enregistr&eacute; le <jsp:getProperty name="pendule" property="day" /> a <jsp:getProperty name="pendule" property="hour" />.<br/>
    Montant :     <jsp:getProperty name="operation" property="montant"/> Euros<br/>
    Solde Actuel: <jsp:getProperty name="operation" property="solde"/> Euros<br/>
    <hr/>
     
    <jsp:include page="form.jsp"/>
     
    </body>
    </html>
    et le code de ma classe Compte
    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
     
    package pack;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    import com.mysql.jdbc.Driver;
     
    public class Compte {
    	private String nom,prenom,typeOperation;
    	private int solde,montant;
     
    	Compte(){}
     
    	Compte(String nom,String prenom){
    		this.nom = nom;
    		this.prenom = prenom;
    	}
     
    	public void ajoutOperation(String typeOperation,int montant){
    		this.typeOperation = typeOperation;
    		if(typeOperation.equals("credit")) this.montant = montant;
    		else if(typeOperation.equals("debit")) this.montant = -montant;
    		/** MAJ du solde **/
    		try {
    			this.solde = getSoldeBD(nom,prenom);
    		}
    		catch (SQLException exp) {System.out.println(exp.getMessage());}
    		/******************/
    		this.solde += this.montant;
     
    		/** Remplissage des Champs **/
    		Connection connection = null;
    		PreparedStatement statement = null;
    		try {
    			Driver monDriver = new com.mysql.jdbc.Driver();
    			DriverManager.registerDriver(monDriver);
    			connection = UserBD.getConnection();
    			statement = connection.prepareStatement("INSERT INTO operation(nom,prenom,montant) VALUES (?,?,?)");			
    			statement.setString(1,nom);
    			statement.setString(2,prenom);
    			statement.setInt(3,this.montant);
    			statement.executeUpdate();
     
    			setSoldeBD(nom,prenom);
    		}
    		catch (SQLException exp) {System.out.println(exp.getMessage());}
    		finally {UserBD.close(statement);UserBD.close(connection);}	
        }
     
    	public void setSoldeBD(String nom,String prenom) throws SQLException{
    		Connection connection = null;
    		PreparedStatement statement = null;
    		try {
    			Driver monDriver = new com.mysql.jdbc.Driver();
    			DriverManager.registerDriver(monDriver);
    			connection = UserBD.getConnection();
    			statement = connection.prepareStatement("UPDATE solde SET montant=?  WHERE nom=? AND prenom=?");
    		    statement.setInt(1,solde);
    		    statement.setString(2,nom);
    		    statement.setString(3,prenom);
    		    statement.executeUpdate();
    		}
    		finally {UserBD.close(statement);UserBD.close(connection);}	
    	}
     
        public int getSoldeBD(String nom,String prenom) throws SQLException{
    		int soldeBD;
    		Connection connection=null;
    		PreparedStatement statement=null;
    		try {
    			Driver monDriver = new com.mysql.jdbc.Driver();
    			DriverManager.registerDriver(monDriver);
    			connection = UserBD.getConnection();
    			statement = connection.prepareStatement("SELECT montant FROM solde WHERE nom=? AND prenom=?");
    			statement.setString(1, nom);
    			statement.setString(2, prenom);
    		ResultSet rs = statement.executeQuery( );
    		if (rs.next( ))
    			soldeBD = rs.getInt(1);
    		else throw new RuntimeException("Compte inexistant: "+nom);
    		}
    		finally {UserBD.close(statement);UserBD.close(connection);}
    		return soldeBD;
    	}
     
    	public String getNom() {return nom;} 
    	public String getPrenom() {return prenom;}
    	public String getTypeOperation() {return typeOperation;} 
    	public int getSolde(){return this.solde;}
    	public int getMontant(){return this.montant;}	
    }
    Je ne vois quelle est mon erreur... mais je crois qu'elle vient du request.setAttribute de ServletConnection.
    Car si j'enleve le bean du compte ainsi que les getProperty correspondant dans operation.jsp tout marche bien (sauf que je n 'ai pas les renseignement du compte...)

    si quelqu'un avait une solution...

    merci

    __
    cdt Gwaedion

  2. #2
    Membre actif
    Inscrit en
    Février 2007
    Messages
    406
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 406
    Points : 207
    Points
    207
    Par défaut
    bonsoir,
    setAttribute n'est elle pas une methode de session??

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 29
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Tout à fait, il faut utiliser request.setParameter().

    De plus dans le code de ta servlet, tu mets toutes tes données dans le request, et dans ta JSP tu affiches ce qui se trouve dans la session. Ce ne sont pas les mêmes "conteneur".

    Soit tu change le scope à request au lieu de session dans operation.jsp, soit tu récupère la session et tu mets tes données dans la session.

    /Muzo

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    merci de vos reponses,

    j'ai trouvé l'erreur... en faite il faut mettre le constructeur sans parametre de la classe compte en public !

    et oui, j'ai remis le scope de operation.jsp en request. je l'avais changé en session pur des test...

    merci !

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

Discussions similaires

  1. Problème avec Request[]
    Par arngrimur dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/10/2011, 17h02
  2. Recuperer un texte saisi: Problème avec request.getParameter
    Par petite bohemienne dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 20/06/2008, 11h23
  3. [Struts] - Problème avec un request.setAttribute
    Par renotm dans le forum Struts 1
    Réponses: 3
    Dernier message: 16/02/2006, 10h00
  4. [struts][jsp] problème avec request.getParameter
    Par stago dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 01/07/2004, 23h52
  5. [jsp]problème avec request.getParameter(...)!
    Par fadoua dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/09/2003, 13h26

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