Bonjour,
Je suis toujours sur mon projet de plateforme éducative et j'ai un nouveau un problème que je ne m'explique pas.

Donc voici le code:

Servlet
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
 
 
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import databean.Exercise;
import databean.Lesson;
import databean.Summary;
 
/**
 * Servlet implementation class controlsumary
 */
@WebServlet("/controlsumary")
public class controlsumary extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
 
 
	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		PrintWriter out = response.getWriter();
		response.setContentType("text/html");
 
		Connection con=null;
		Statement stmt;
 
		try{											//driver
			Class.forName("com.mysql.jdbc.Driver");
		}catch(ClassNotFoundException e){
			out.print("erreur au driver "+e.getMessage());
		}
 
		String url = "jdbc:mysql://localhost/test";		//connection à base de données
		String nom = "root";
		String mdp = "";
 
		try{
			con = DriverManager.getConnection(url,nom,mdp);
			stmt = con.createStatement();			//query
			String query ="select distinct lesson.ID_LESSON, titre, abstract, exercise_number from exercise ,lesson where exercise.id_lesson=lesson.id_lesson ";
			ResultSet rs = stmt.executeQuery(query);
 
			Summary sum=new Summary();
			Lesson beanlesson=new Lesson();
			int idtmp=-1;
			Exercise tmp=new Exercise();
			beanlesson.setListexercise(new ArrayList<Exercise>());
 
			while(rs.next()){
				if(idtmp==-1 || beanlesson.getId_lesson()!=idtmp ){ //on regarde si c'est la premiére lesson ou si on est tourjours dans la même
					if(idtmp!=-1){							//si changement de lesson on ajoute le bean à l'arraylist
						sum.getListlesson().add(beanlesson);						
					}
					beanlesson.setId_lesson(rs.getInt(1));		//if we begin a new lesson we change the value of bean
					beanlesson.setTitle(rs.getString(2));			// id_lesson, title & absract
					beanlesson.setAbstract(rs.getString(3));
					idtmp=beanlesson.getId_lesson();
				}
				tmp.setExercise_number(rs.getInt(4));		//add a new exercise of the current lesson to the list
				beanlesson.getListexercise().add(tmp);
			}
 
 
			//now, we forward the list to jsp
			request.setAttribute("summ", sum);
			RequestDispatcher rd=request.getRequestDispatcher("sumaryview.jsp");
			rd.forward(request,response);
			con.close();
 
		}catch(SQLException e){
			out.print("erreur sql"+e.getMessage());
		}
		out.println("</body>");
	}
}
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
<%@ page import="java.util.ArrayList"%>
<%@ page import="databean.Lesson"%>
<%@ page import="databean.Exercise"%>
 
<?xml version="1.0" encoding="utf-8" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Samenvatting</title>
</head>
<body>
	<h1>Samenvatting</h1>
 
	<jsp:useBean id="summ" scope="request" class="databean.Summary" />
	<jsp:getProperty property="listlesson" name="summ" />
 
	<%
                ArrayList<Lesson> listl = summ.getListlesson();
                for (Lesson l : listl) {
                        out.print("<h2>" + l.getTitle() + "</h2>");
                        out.print("<p>" + l.getAbstract() + "</p>");
                        ArrayList<Exercise> liste = l.getListexercise();
                        out.print("<form action=\"exercise\" method=\"get\">");
                        for (Exercise e : liste) {
                                int i = e.getExercise_number();
                                out.print("<input type=\"submit\" value=\"" + i
                                                + "\"</input>");
                        }
                        out.print("     </form>");
                }
        %>
 
</body>
</html>

Tomcat retourne à l’exécution :
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
 
Etat HTTP 500
 
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: An exception occurred processing JSP page /sumaryview.jsp at line 22
 
19: 
20: 	<%
21:             ArrayList<Lesson> listl = summ.getListlesson();
22:             for (Lesson l : listl) {
23:                     out.print("<h2>" + l.getTitle() + "</h2>");
24:                     out.print("<p>" + l.getAbstract() + "</p>");
25:                     ArrayList<Exercise> liste = l.getListexercise();
 
 
Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:471)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        controlsumary.service(controlsumary.java:87)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
 
 
cause mère 
 
java.lang.NullPointerException
        org.apache.jsp.sumaryview_jsp._jspService(sumaryview_jsp.java:96)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        controlsumary.service(controlsumary.java:87)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Quelques petites précision:
C'est une plateforme d'exercice donc il y a des exercices, des leçons, des questions. Chaque leçon possède 0..n exercices, chaque exercice possède 1..N question. Tout ces éléments existe en tant que classe Java (Bean). De plus j'ai rajouté un javabean Sumary, pour faire office de sommaire et qui contient une List de leçon, les leçon contenant elle même une List d'exercice et ainsi de suite.
J'ai ajouté des attribut de type List au beans parce que je ne voyais pas d'autre façon de représenter une liaison de cardinalité de type O..N 0..1.

Comment faire pour corriger l'erreur?

Je vous remercie d'avance pour vos réponses.
(edit: mise à jour du code)