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:
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:
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:
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> |
web.xml redirige le tout vers ServletRequete.class
Code:
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:
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:
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> |
et le code de ma classe Compte
Code:
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