J'ai fait quelques modifications à mes fichiers au vu des différents forums que j'ai pu consulter.
Voici l'arborescence de mon projet dans Eclipse Java EE:
/WEB-INF/src
exemple15
ClientAction.java
Ajouter_Client-validation.xml
ClientAction-Modifier_Client-validation.xml
exemple15.boiteoutils
ApplicationListener.java
GestionBaseDeDonnees.java
exemple15.javabeans
Client.java
exemple15.modeles
DAO.java
ModeleClientDAO.java
ModeleDAO.java
log4j.properties
struts.xml
css
styles.css
images
aide.jpg
ajouterclient.jpg
editerclient.jpg
important.jpg
supprimerclient.jpg
jsp
EditerClient.jsp
ListerClient.jsp
WEB-INF
lib
web.xml
Voici les fichiers:
ClientAction.java
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 96 97 98 99 100 101 102
| package exemple15;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import exemple15.javabeans.Client;
import exemple15.modeles.ModeleClientDAO;
@SuppressWarnings("serial")
public class ClientAction extends ActionSupport implements Preparable, ModelDriven{
private Client client;
private List<Client> listeClients;
private int idClientEnCours;
public void prepare() throws Exception {
ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
// en création, créer un nouvel objet vide
if(idClientEnCours==0)
{
client=new Client();
}
// en modification, retourner les infos de l'objet
else
{
client=modeleClientDAO.getClient(idClientEnCours);
}
}
public Object getModel() {
return client;
}
public int getIdClientEnCours() {
return idClientEnCours;
}
public void setIdClientEnCours(int idClientEnCours) {
this.idClientEnCours = idClientEnCours;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public List<Client> getListeClients() {
ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
listeClients=(ArrayList<Client>)modeleClientDAO.getListeClient();
return listeClients;
}
public void setListeClients(List<Client> listeClients) {
this.listeClients = listeClients;
}
// retourner la liste des clients après récupération
public String lister()
{
ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
listeClients=(ArrayList<Client>)modeleClientDAO.getListeClient();
return SUCCESS;
}
// ajouter le client dans le modèle
public String ajouter()
{
ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
modeleClientDAO.ajouterClient(client);
return SUCCESS;
}
// afficher le formulaire en édition
public String editer()
{
return SUCCESS;
}
// modifier un client
public String modifier()
{
ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
modeleClientDAO.modifierClient(client);
return SUCCESS;
}
// supprimer un client à partir du paramètre reçu nommé idClient
public String supprimer()
{
ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
modeleClientDAO.supprimerClient(idClientEnCours);
return SUCCESS;
}
} |
ClientAction-Ajouter_Client-validation.xml
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="client.identifiant">
<field-validator type="requiredstring">
<message>Le champ identifiant est obligatoire</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">10</param>
<message>Le champ identifiant doit avoir entre 4 et 10 caracteres</message>
</field-validator>
</field>
<field name="client.motdepasse">
<field-validator type="requiredstring">
<message>Le champ mot de passe est obligatoire</message>
</field-validator>
</field>
</validators> |
ClientAction-Modifier_Client-validation.xml
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="client.identifiant">
<field-validator type="requiredstring">
<message>Le champ identifiant est obligatoire</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">10</param>
<message>Le champ identifiant doit avoir entre 4 et 10 caracteres</message>
</field-validator>
</field>
<field name="client.motdepasse">
<field-validator type="requiredstring">
<message>Le champ mot de passe est obligatoire</message>
</field-validator>
</field>
</validators> |
ApplicationListener.java
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
| package exemple15.boiteoutils;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;
public class ApplicationListener implements ServletContextListener{
Context context=null;
//fonction appelée lors de la création du lanceur
public void contextInitialized(ServletContextEvent servletContextEvent)
{
ServletContext servletContext=servletContextEvent.getServletContext();
String dataSourceJNDI=servletContext.getInitParameter("dataSourceJNDI");
try
{
context=new InitialContext();
DataSource dataSource=(DataSource)context.lookup(dataSourceJNDI);
if(dataSource==null)
{
System.out.println("Il n'y a pas de DataSource pour le projet : exemple15");
}
else
{
System.out.println("DataSource : exemple15 charge !");
}
servletContext.setAttribute("dataSource", dataSource);
}
catch(NamingException e)
{
throw new RuntimeException();
}
finally
{
try
{
//fermer le context
if(context!=null)
{
context.close();
}
}
catch(Exception e)
{
System.out.println("Erreur lors de initCtx !");
}
}
}
//fonction appelée lors de la destruction du lanceur
public void contextDestroyed(ServletContextEvent servletContextEvent)
{
try
{
//fermer le context
if(context!=null)
{
context.close();
}
}
catch(Exception e)
{
System.out.println("Erreur lors de initCtx !");
}
}
} |
GestionBaseDeDonnees.java
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
| package exemple15.boiteoutils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class GestionBaseDeDonnees
{
// Permet de fermer un resultset
public static void closeResulset(ResultSet resultat)
{
if(resultat!=null)
{
try
{
resultat.close();
}
catch(Exception e)
{
System.out.println("Erreur lors de la fermerture d'une connexion d'un resultset");
}
}
}
// Fermeture d'une requête
public static void closeRequest(Statement requete)
{
if(requete!=null)
{
try
{
requete.close();
}
catch(Exception e)
{
System.out.println("Erreur lors de la fermerture d'une requête");
}
}
}
// Fermeture d'une connexion
public static void closeConnection(Connection connexion)
{
if(connexion!=null)
{
try
{
connexion.close();
}
catch(Exception e)
{
System.out.println("Erreur lors de la fermerture d'une connexion");
}
}
}
} |
Client.java
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
| package exemple15.javabeans;
@SuppressWarnings("serial")
public class Client {
private int idClient;
private String identifiant;
private String motdepasse;
public Client(){
}
public Client(int idClient,String identifiant, String motdepasse){
this.idClient=idClient;
this.identifiant=identifiant;
this.motdepasse=motdepasse;
}
public int getIdClient() {
return idClient;
}
public void setIdClient(int idClient) {
this.idClient = idClient;
}
public String getIdentifiant() {
return identifiant;
}
public void setIdentifiant(String identifiant) {
this.identifiant = identifiant;
}
public String getMotdepasse() {
return motdepasse;
}
public void setMotdepasse(String motdepasse) {
this.motdepasse = motdepasse;
}
} |
DAO.java
Code :
1 2 3 4 5 6 7 8 9
| package exemple15.modeles;
import java.sql.Connection;
public interface DAO {
// Définition de la méthode à déclarer dans les classes utilisatrices
public Connection getConnection();
} |
ModeleClientDAO.java
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 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 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
| package exemple15.modeles;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import exemple15.boiteoutils.GestionBaseDeDonnees;
import exemple15.javabeans.Client;
public class ModeleClientDAO extends ModeleDAO{
// Variables
Connection connexion=null;
ResultSet resultat=null;
private static List<Client> listeClients;
// retourner la liste des clients
public List<Client> getListeClient()
{
// Variables
PreparedStatement requete=null;
Client client=null;
String requeteString=null;
listeClients=new ArrayList<Client>();
try
{
// Ouverture d'une connexion
connexion=super.getConnection();
// requete pour la liste des clients
requeteString="SELECT * FROM client WHERE 1 ORDER BY idClient";
requete=connexion.prepareStatement(requeteString);
// Execution de la requête
resultat=requete.executeQuery();
// On stocke le resultat dans une liste
if(resultat!=null)
{
while(resultat.next())
{
// On effectue le mapping des attributs avec les champs de la table SQL
client=mapperClient(resultat);
// On ajoute l'objet a la liste des clients
listeClients.add((Client)client);
}
}
}
catch(Exception e)
{
System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction getListeClients");
}
finally
{
try
{
// Fermeture de la connexion
if(resultat!=null)
{
GestionBaseDeDonnees.closeResulset(resultat);
}
if(requete!=null)
{
GestionBaseDeDonnees.closeRequest(requete);
}
if(connexion!=null)
{
GestionBaseDeDonnees.closeConnection(connexion);
}
}
catch(Exception ex)
{
System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction getListeClients");
}
}
// Retourner la liste des clients
return listeClients;
}
// trouver un client dans la base
public Client getClient(int idClient)
{
// Variables
PreparedStatement requete=null;
Client client=null;
String requeteString=null;
try
{
// Ouverture d'une connexion
connexion=super.getConnection();
// Création de la requête
requeteString = "SELECT * FROM client WHERE idClient=?";
// On prépare la requête
requete=connexion.prepareStatement(requeteString);
requete.setInt(1,idClient);
// Execution de la requête
resultat=requete.executeQuery();
// On stocke le resultat dans l'objet client
if(resultat!=null)
{
if(resultat.next())
{
// On effectue le mapping des attributs avec les champs de la table SQL
client=mapperClient(resultat);
}
}
}
catch(Exception e)
{
client=null;
System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction getClient");
}
finally
{
try
{
// Fermeture de la connexion
if(resultat!=null)
{
GestionBaseDeDonnees.closeResulset(resultat);
}
if(requete!=null)
{
GestionBaseDeDonnees.closeRequest(requete);
}
if(connexion!=null)
{
GestionBaseDeDonnees.closeConnection(connexion);
}
}
catch(Exception ex)
{
System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction getClient");
}
}
// Retourner le client
return client;
}
// ajouter un client dans la base
public int ajouterClient(Client client)
{
// Variables
PreparedStatement requete=null;
String requeteString=null;
int codeErreur=0;
try
{
// Ouverture d'une connexion
connexion=super.getConnection();
// Création de la requête
requeteString="INSERT INTO client (identifiant,motdepasse) VALUES(?,?)";
// Préparation de la requête
requete=connexion.prepareStatement(requeteString);
requete.setString(1, client.getIdentifiant());
requete.setString(2, client.getMotdepasse());
// On vide le client par sécurité
client=null;
// Execution de la requête
codeErreur=requete.executeUpdate();
}
catch(Exception e)
{
codeErreur=0;
System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction ajouterClient");
}
finally
{
try
{
// Fermeture de la connexion
if(resultat!=null)
{
GestionBaseDeDonnees.closeResulset(resultat);
}
if(requete!=null)
{
GestionBaseDeDonnees.closeRequest(requete);
}
if(connexion!=null)
{
GestionBaseDeDonnees.closeConnection(connexion);
}
}
catch(Exception ex)
{
System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction ajouterClient");
}
}
// Retourner le code d'erreur
return codeErreur;
}
// supprimer un client dans la base
public int supprimerClient(int idClient)
{
// Variables
PreparedStatement requete=null;
String requeteString=null;
int codeErreur=0;
try
{
// Ouverture d'une connexion
connexion=super.getConnection();
// Supprimer le client
requeteString="DELETE FROM client WHERE idClient=?";
requete=connexion.prepareStatement(requeteString);
requete.setInt(1, idClient);
// Execution de la requête
codeErreur=requete.executeUpdate();
}
catch(Exception e)
{
codeErreur=0;
System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction supprimerClient");
}
finally
{
try
{
// Fermeture de la connexion
if(resultat!=null)
{
GestionBaseDeDonnees.closeResulset(resultat);
}
if(requete!=null)
{
GestionBaseDeDonnees.closeRequest(requete);
}
if(connexion!=null)
{
GestionBaseDeDonnees.closeConnection(connexion);
}
}
catch(Exception ex)
{
System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction supprimerClient");
}
}
// Retourner le code d'erreur
return codeErreur;
}
// modifier un client dans la base
public int modifierClient(Client client)
{
// Variables
PreparedStatement requete=null;
String requeteString=null;
int codeErreur=0;
try
{
// Ouverture d'une connexion
connexion=super.getConnection();
// Création de la requête
requeteString="UPDATE client set identifiant=?,motdepasse=? WHERE idClient=?";
requete=connexion.prepareStatement(requeteString);
requete.setString(1, client.getIdentifiant());
requete.setString(2, client.getMotdepasse());
requete.setInt(3, client.getIdClient());
// On vide le client par sécurité
client=null;
// Execution de la requête
codeErreur=requete.executeUpdate();
}
catch(Exception e)
{
System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction modifierClient");
}
finally
{
try
{
// Fermeture de la connexion
if(resultat!=null)
{
GestionBaseDeDonnees.closeResulset(resultat);
}
if(requete!=null)
{
GestionBaseDeDonnees.closeRequest(requete);
}
if(connexion!=null)
{
GestionBaseDeDonnees.closeConnection(connexion);
}
}
catch(Exception ex)
{
System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction modifierClient");
}
}
// Retourner le code d'erreur
return codeErreur;
}
// Réaliser la transformation Relationnel vers Objet
public Client mapperClient(ResultSet resultat)
{
// Variables
Client client=new Client();
try
{
if (resultat.getString("idClient")==null)
{
client.setIdClient(0);
}
else
{
client.setIdClient(resultat.getInt("idClient"));
}
if (resultat.getString("identifiant")==null)
{
client.setIdentifiant("");
}
else
{
client.setIdentifiant(resultat.getString("identifiant"));
}
if (resultat.getString("motdepasse")==null)
{
client.setMotdepasse("");
}
else
{
client.setMotdepasse(resultat.getString("motdepasse"));
}
}
catch (Exception e)
{
//Si il y a une erreur durant le mapping des attributs
client=null;
System.out.println("Erreur lors du mapping des attributs d'un client dans la class ModeleClientDAO, fonction mapperClient");
}
//On retourne le client
return client;
}
} |
ModeleDAO.java
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
| package exemple15.modeles;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.sql.DataSource;
import org.apache.struts2.ServletActionContext;
// Classe de connexion
public class ModeleDAO implements DAO
{
DataSource dataSource=null;
// Récupérer une connexion
public Connection getConnection()
{
ServletContext servletContext=ServletActionContext.getServletContext();
if(this.dataSource==null)
{
dataSource=(DataSource)servletContext.getAttribute("dataSource");
}
Connection connection=null;
if(dataSource!=null)
{
try
{
connection=dataSource.getConnection();
}
catch(SQLException e)
{
System.out.println(e);
}
}
// retourner la connexion
return connection;
}
// Positionner une dataSource
public void setConnection(DataSource dataSource)
{
this.dataSource=dataSource;
}
} |
log4j.properties
Code :
1 2 3 4 5
| #définition du niveau et des Appender du rootLogger (ordre : DEBUG - INFO - WARN - ERROR - FATAL)
#log4j.logger.freemarker=OFF
#log4j.logger.com.opensymphony.xwork2=OFF
#log4j.logger.org.apache=INFO
#log4j.rootLogger=DEBUG |
struts.xml
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
| <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<package name="exemple15" namespace="/" extends="struts-default">
<default-action-ref name="Lister_Client" />
<action name="Lister_Client" class="exemple15.ClientAction" method="lister">
<result>/jsp/ListerClient.jsp</result>
</action>
<action name="Ajouter_Client" class="exemple15.ClientAction" method="ajouter">
<result name="input">/jsp/ListerClient.jsp</result>
<result name="success" type="redirectAction">Lister_Client</result>
</action>
<action name="Editer_Client" class="exemple15.ClientAction" method="editer">
<interceptor-ref name="paramsPrepareParamsStack"/>
<result name="success">/jsp/EditerClient.jsp</result>
</action>
<action name="Modifier_Client" class="exemple15.ClientAction" method="modifier">
<result name="input">/jsp/EditerClient.jsp</result>
<result name="success" type="redirectAction">Lister_Client</result>
</action>
<action name="Supprimer_Client" class="exemple15.ClientAction" method="supprimer">
<result name="success" type="redirectAction">Lister_Client</result>
</action>
</package>
</struts> |
styles.css
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 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
| * { margin: 0; padding: 0;}
html, body {
margin: 0;
text-align: center;
}
#enveloppe
{
position: relative;
margin-left: 4%;
margin-top: 2%;
width: 400px;
text-align: left;
background:#fefefe;
border-style:solid;
border-width:1px;
border-color:#eaeaea;
padding: 14px;
}
.input
{
width:200px;
height:18px;
border:1px solid;
border-color:#6f6e6e;
border-width:1px;
border-color:#A8A6A7;
color:#686667;
font-family:tahoma, verdana, arial, sans-serif;
font-size:11px;
font-weight: normal;
}
.inputerreur
{
width:200px;
height:18px;
border:1px solid;
border-color:#6f6e6e;
border-width:1px;
border-color:#A8A6A7;
color:#686667;
font-family:tahoma, verdana, arial, sans-serif;
font-size:11px;
font-weight: normal;
background-color:#F00;
}
.errorMessage
{
color:#D53A3E;
font-family:tahoma, verdana, arial, sans-serif;
font-size:13px;
}
#message_erreur
{
margin-top:16px;
margin-bottom:0px;
margin-left:40px;
padding-bottom:2px;
padding-top:2px;
padding-left:20px;
padding-right:50px;
text-align:justify;
border-style:solid;
border-top-width:1px;
border-top-color:#D53A3E;
border-right-width:2px;
border-right-color:#D53A3E;
border-bottom-width:2px;
border-bottom-color:#D53A3E;
border-left-width:1px;
border-left-color:#D53A3E;
width:600px;
}
#message_erreur ul
{
padding-top:0px;
margin-top:2px;
padding-bottom:0px;
padding-right:20px;
margin-bottom:0px;
margin-left:8px;
margin-right:10px;
color:#D53A3E;
font-family:tahoma, verdana, arial, sans-serif;
font-size:13px;
font-weight:normal;
list-style-image:url(../images/important.gif);
}
#message_erreur label
{
color:#D53A3E;
font-family:tahoma, verdana, arial, sans-serif;
font-size:12px;
font-weight:bold;
}
#tableau
{
margin-top:20px;
border-style:solid;
border-width:1px;
border-color:#A8A6A7;
background-color:#E8E8E8;
color:#686667;
font-family:tahoma, verdana, arial, sans-serif;
font-size:11px;
width:100%;
}
.ligne1
{
background-color: #CCCBC6;
}
.ligne2
{
background-color: #F5F4F6;
} |
EditerClient.jsp
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
| <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Editer un client</title>
<style type="text/css">@import url(css/styles.css);</style>
</head>
<body>
<!-- Message d'erreur -->
<s:if test="errors.size()>0">
<div id="message_erreur">
<label>Les erreurs suivantes se sont produites : </label>
<ul><s:fielderror/></ul>
</div>
</s:if>
<div id="enveloppe">
<h3>Editer un client</h3>
<s:form method="post" action="Modifier_Client">
<s:hidden key="client.idClient"/>
<s:textfield name="client.identifiant" id="client.identifiant" label="Identifiant" labelposition="top" cssClass="input"/>
<s:textfield name="client.motdepasse" id="client.motdepasse" label="Mot de passe" labelposition="top" cssClass="input"/>
<s:submit value="Modifier un client"/>
</s:form>
</div>
</body>
</html> |
ListerClient.jsp
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
| <%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Liste des clients</title>
<style type="text/css">@import url(css/styles.css);</style>
</head>
<body>
<!-- Message d'erreur -->
<s:if test="errors.size()>0">
<div id="message_erreur">
<label>Les erreurs suivantes se sont produites : </label>
<ul><s:fielderror/></ul>
</div>
</s:if>
<div id="enveloppe">
<h3>Ajouter un client</h3>
<s:form method="post" action="Ajouter_Client">
<s:textfield name="client.identifiant" id="client.identifiant" label="Identifiant" labelposition="top" cssClass="input"/>
<s:textfield name="client.motdepasse" id="client.motdepasse" label="Mot de passe" labelposition="top" cssClass="input"/>
<s:submit value="Ajouter un client"/>
</s:form>
<table border="0" id="tableau" cellpadding="0" cellspacing="0">
<tr><td><b>ID</b></td><td><b>Identifiant</b></td><td><b>Mot de passe</b></td><td colspan="2" align="center"><b>Gestion</b></td></tr>
<s:iterator value="listeClients" status="ligne">
<s:if test="#ligne.odd"><tr class="ligne1"></s:if>
<s:if test="#ligne.even"><tr class="ligne2"></s:if>
<td><s:property value="idClient"/></td>
<td><s:property value="identifiant"/></td>
<td><s:property value="motdepasse"/></td>
<td align="center"><a href="Editer_Client.action?idClientEnCours=${idClient}"/><img src="images/editerclient.png" alt="Editer" title="Editer" border="0"/></a></td>
<td align="center"><a href="Supprimer_Client.action?idClientEnCours=${idClient}"/><img src="images/supprimerclient.png" alt="Supprimer" title="Supprimer" border="0"/></a></td>
</tr>
</s:iterator>
</table>
</div>
</body>
</html> |
web.xml
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
| <?xml version="1.0" encoding="UTF-8"?>
<web-app id="exemple15" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- Chargeur du datasource -->
<listener>
<listener-class>exemple15.boiteoutils.ApplicationListener</listener-class>
</listener>
<!-- Parametre globaux -->
<context-param>
<param-name>dataSourceJNDI</param-name>
<param-value>java:/comp/env/jdbc_struts2_MySQL</param-value>
</context-param>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Informations de connexion a la base de donnees -->
<resource-ref>
<description>Connexion a la base de donnees MySQL</description>
<res-ref-name>jdbc_struts2_MySQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app> |
J'essaye de mettre en place un pool de connexion, le fichier qui sert à la déclaration du pool dans le fichier de configuration du projet
C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\conf\Catalina\localhost\exemple15.xml
Voici le fichier exemple15.xml:
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13
| <Context path="/exemple15" reloadable="true"
docBase="D:\workspace\exemple15">
<Resource name="jdbc_struts2_MySQL"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="Esprit27"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/struts2"
maxActive="20"
maxIdle="10"
validationQuery="SELECT 1"/>
</Context> |
J'utilise Eclipse Java EE, Tomcat 7.0, MySQL 5.5 et j'ai installé le pilote approprié (mysql-connector-java-5.1.19-bin.jar) dans le répertoire /WEB-INF/lib de l'application.
Mon application se trouve dans le répertoire D:\workspace\exemple15.
J'ai crée la base de données struts avec la table client et les trois champs dans MySQL.
Voici le message d'erreur qui s'affiche dans la console d'Eclipse en tapant l'url
http://localhost:8080/exemple15/, l'appli sinon s'affiche, mais sans les données:
Citation:
Cannot create JDBC driver of class '' for connect URL 'null'
Erreur dans la requete dans la classe ModeleClientDAO fonction getListeClients
|
De plus je ne connais pas à priori le nom de mon datasource que l'on retrouve à plusieurs endroits dans le projet (dans web.xml pour le <param-value> et le <res-ref-name> et dans exemple15.xml pour le <Resource name, j'ai mis le nom cité dans l'exemple, mais je ne sais pas ce qui le détermine. Dans l'exemple ils mettent: jdbc_struts2_MySQL, cependant je ne sais pas si on peut mettre ce qu'on veut. Quand j'ai installé MySQL5.5, il m'a demandé de rentrer le nom MySQL55 à un moment donné, faut-il que j'utilise ce nom comme Datasource. De plus on utilise un docBase et workDir dans exemple15.xml et je ne sais pas trop quoi mettre sur ces données, si ce n'est pour le premier le répertoire de mon projet.
Je vous remercie par avance de votre aide, car je patine un peu en ce moment.
mumu27