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