Bonjour,

J'ai une classe Categorie.java qui accède à une base de données, mappe la table Categorie en objets Java, puis la page categorie.jsp pioche les infos dans la classe Categorie, puis retourne une page xml.

Categorie.java :
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package com.projet.beans;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
 
/**
 * <b>Categorie est la classe représentant la catégorie d'une société</b>
 * <p>
 * Une catégorie est caractérisée par les informations suivantes :
 * <ul>
 * <li>Un nom</li>
 * <li>Une description</li>
 * <li>Une catégorie parente</li>
 * </ul>
 * </p>
 * 
 * @author CN
 * @version 1.0
 */
public class Categorie {
 
	/**
         * Nom de la catégorie
         */
	private String nom;
 
	/**
         * Description de la catégorie
         */
	private String description;
 
	/**
         * Catégorie parente
         */
	private Categorie parent;
 
	/**
         * L'indice courant permettant d'identifier une catégorie dans la Hashtable listeCategories
         */
	private static int courant = 1 ;
 
	/**
         * Table de hachage stockant les catégories suivant une clé représentant l'id de la catégorie
         * <p>
         * Il est possible d'ajouter ou de retirer des catégories dans cette table
         * <p>
         * 
         * @see Categorie#add(Categorie c)
         * @see Categorie#del(Categorie c)
         */
	public static Map <Integer, Categorie> listeCategories = new HashMap<Integer, Categorie>();
 
 
	static {
		Categorie c = new Categorie("nom1", "description1", null);
		add(c);	
	}
 
	/**
         * Constructeur vide
         */
	public Categorie() {
		super();
	}
 
	/**
         * Constructeur Categorie
         * 
         * @param nom
         * @param description
         * @param parent
         * 
         * @see Categorie#nom
         * @see Categorie#description
         * @see Categorie#parent
         */
	public Categorie(String nom, String description, Categorie parent) {
		super();
		this.nom = nom;
		this.description = description;
		this.parent = parent;
	}
 
 
	/**
         * @return nom Le nom de la catégorie
         */
	public String getNom() {
		return nom;
	}
 
	/**
         * @param nom Le nom de la catégorie à modifier
         */
	public void setNom(String nom) {
		this.nom = nom;
	}
 
	/**
         * @return description La description de la catégorie
         */
	public String getDescription() {
		return description;
	}
 
	/**
         * @param description La description de la catégorie à modifier
         */
	public void setDescription(String description) {
		this.description = description;
	}
 
	/**
         * @return parent La catégorie parente
         */
	public Categorie getParent() {
		return parent;
	}
 
	/**
         * @param parent La catégorie parente à modifier
         */
	public void setParent(Categorie parent) {
		this.parent = parent;
	}
 
	/**
         * Retourne la clé d'une catégorie
         * 
         * @return Id de la catégorie
         */
	public int getId() {
		Set<Integer> mySet = listeCategories.keySet();
		for(Integer i : mySet){
			Categorie courant = get(i);
			if (courant == this) return i;
		}
		return 0;
	}
 
	/**
         * Retourne une catégorie à partir de sa clé
         * 
         * @param cle
         * 
         * @return categorie La catégorie associée à la clé
         */
	public static Categorie get(int cle) {
		return listeCategories.get(cle);
	}
 
 
	/**
         * Ajoute une catégorie dans la liste des catégories
         * 
         * @param c La catégorie à ajouter
         * 
         * @see Categorie#listeCategories
         */
	public static void add(Categorie c) {
		listeCategories.put(courant, c);
		courant++;
	}
 
	/**
         * Enlève une catégorie de la liste des catégories
         * 
         * @param c La catégorie à enlever
         * 
         * @see Categorie#listeCategories
         */
	public static void del(Categorie c) {
		listeCategories.remove(c.getId());
		courant--;
	}
}
Categorie.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
<%@ page language="java" contentType="text/xml; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@ page import="com.projet.beans.Categorie"%>
<?xml version="1.0" encoding="ISO-8859-1"?>
<%  String st = request.getParameter("categorie");
    int i = Integer.parseInt("" + st.charAt(st.length()-1));
    Categorie c = Categorie.get(i);
    Categorie p = c.getParent(); %>
<categorie>
	<nom>"<%= c.getNom() %>"</nom>
	<description>"<%= c.getDescription() %>"</description>
	<parent>
	<% while(p != null){ %>
		<nom>"<%= p.getNom() %>"</nom>
		<description>"<%= p.getDescription() %>"</description>
		<% p = p.getParent(); %>
	<% } %>
	</parent>
</categorie>
Grace à ces 2 classes, lorsque j'accède à l'URL :
http://localhost:8080/NomDuProjet/ca...p?categorie=c1
j'obtiens bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<?xml version="1.0" encoding="ISO-8859-1" ?> 
- <categorie>
  <nom>"nom1"</nom> 
  <description>"description1"</description> 
  <parent /> 
  </categorie>
maintenant, au lieu de créer statiquement une catégorie, j'aimerais récupérer des catégories de la base de données.

j'ai donc créé la classe Connexion.java :
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.projet.donnees;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
 
import com.projet.beans.Categorie;
 
/**
 * <b>Connexion permet de se connecter à la base de données</b>
 * <p>
 * 2 modes de connexion sont possibles :
 * <ul>
 * <li>Mode "user" : 
 * un simple utilisateur pourra seulement consulter les informations sur les contacts et les clients.
 * </li>
 * <li>Mode "admin" :
 * un administrateur pourra en plus modifier ou supprimer des informations dans la base de données.
 * </li>
 * </ul>
 * </p>
 * 
 * @author CN
 * @version 1.0
 *
 */
public class Connexion {
 
	/**
         * Mode utilisateur
         */
	public static int mode = 0;
 
	/**
         * Pilote jdbc postgresql
         */
	private static String driver = "org.postgresql.Driver";
 
	/**
         * Url de connexion
         */
	private static String url = "jdbc:postgresql://IPduServeur:5432/NomBDD";
 
 
	public Connexion() {
		super();
 
		try { // Création de la connexion
			Class.forName(driver);
			Connection con = null;
 
			if (mode == 0){ // mode user
				con = DriverManager.getConnection(url, "login1", "mdp");
			} else { // mode admin
				con = DriverManager.getConnection(url, "login2", "mdp");
			}
 
			try { // Utilisation de la ressource
 
				HashMap<Integer, Categorie> listeTemp;
				Set<Integer> mySet;
 
				// Chargement des catégories
				listeTemp = new HashMap<Integer, Categorie>();
				Categorie c;
 
				// Sélection de toutes les catégories parentes
				Statement stmt = con.createStatement();
 
				try {
					ResultSet rs = stmt.executeQuery("SELECT * FROM categorie WHERE id_parent is null");
 
					try { // Traitement sur le ResultSet
						while(rs.next()){
							c = new Categorie(rs.getString("nom"), rs.getString("description"), null);
							listeTemp.put(rs.getInt("id"), c);
						}
						Categorie.listeCategories.putAll(listeTemp);
 
						HashMap <Integer, Categorie> listeTemp2 = new HashMap<Integer, Categorie>();
 
						while(!listeTemp.isEmpty()){
							listeTemp2.clear();
							mySet = listeTemp.keySet();
 
							for (Integer i : mySet) {
								rs = stmt.executeQuery("SELECT * FROM categorie WHERE id_parent = " + i);
								while(rs.next()){
									c = new Categorie(rs.getString("nom"), rs.getString("description"), Categorie.get(i));
									listeTemp2.put(rs.getInt("id"), c);
								}
							}
 
							listeTemp.clear();
							listeTemp = listeTemp2;
 
							Categorie.listeCategories.putAll(listeTemp);
						}
 
						mySet = Categorie.listeCategories.keySet();
 
						for (Integer i : mySet) {
							Categorie courant = Categorie.get(i);
							System.out.println("Categorie " + courant);
							System.out.println("Id : " + courant.getId());
							System.out.println("Nom : " + courant.getNom());
							System.out.println("Description : " + courant.getDescription());
							System.out.println("Parent : " + courant.getParent());
							System.out.println("------------------------------------");
						}
 
					} finally {
						rs.close();
					}
				} finally {
					stmt.close();
				}
			} finally {
				// Libération de la ressource
				con.close();
			}
		} catch (Exception e){
			System.out.print(e.getMessage());
		}
	}
}
et ca marche très bien, j'obtiens :

Categorie com.projet.beans.Categorie@181edf4
Id : 1
Nom : multimedia
Description : client agence multimedia
Parent : null
------------------------------------
Categorie com.projet.beans.Categorie@12d3205
Id : 2
Nom : mobile
Description : client mobile
Parent : com.teamlog.beans.Categorie@181edf4
------------------------------------

mais je voudrais pouvoir y accéder à partir de ma page jsp, j'intègre donc ce code dans la classe Categorie.java à la place de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
static {
 
		Categorie c1 = new Categorie("nom1", "description1", null);
		add(c1);
 
}
mais la ca ne marche plus, ca fait un bail que je galère la dessus, quelqu'un verrait-il ce qui ne va pas ?

Merci de votre aide