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:
Qui porte apparement sur la ligne suivante de mon fichier operaion.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 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)
voila comment ce deroule mon appli.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<jsp:useBean id="operation" scope="session" class="pack.Compte"/>
A partir de accueil.jsp, je choisi de saisir un credit ou un debit
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
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édit</th></tr> <tr> <td>Cré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ébit</th></tr> <tr> <td>Dé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>
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 <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>
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
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); } } } }
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 <%@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é 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>
Je ne vois quelle est mon erreur... mais je crois qu'elle vient du request.setAttribute de ServletConnection.
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;} }
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
Partager