VII. SUPPRESSION DE DONNEES EN BASE▲
VII-A. Etape 8 : Suppression d'enregistrements dans la base de données▲
VII-A-1. Modification de la classe DAO▲
Ajouter la méthode "supprimerElementCourse" dans la classe "ListeCoursesDAO".
/**
* Supprime un nouvel élément dans la liste des courses
*
@param
pIdObjet
Identifiant de l'élément
*
@return
Erreur s'il y a lieu
*/
public
String supprimerElementCourse
(
final
Long pIdObjet) {
try
{
final
Context lContext =
new
InitialContext
(
);
final
DataSource lDataSource =
(
DataSource) lContext.lookup
(
NOM_RESOURCE_JDBC);
final
Connection lConnection =
lDataSource.getConnection
(
);
// Insertion du nouvel enregistrement
final
PreparedStatement lPreparedStatementCreation =
lConnection.prepareStatement
(
"DELETE FROM LISTECOURSES WHERE IDOBJET = ?"
);
lPreparedStatementCreation.setLong
(
1
, pIdObjet);
lPreparedStatementCreation.executeUpdate
(
);
return
null
;
}
catch
(
NamingException e) {
return
"NamingException : "
+
e.getMessage
(
);
}
catch
(
SQLException e) {
return
"SQLException : "
+
e.getMessage
(
);
}
}
VII-A-2. Création de la classe Action de suppression▲
Créer une classe "SupprimerElementCoursesAction" dans le package "com.developpez.rpouiller.monapplication".
Saisir le code suivant pour l'action.
package
com.developpez.rpouiller.monapplication;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
org.apache.struts.Globals;
import
org.apache.struts.action.Action;
import
org.apache.struts.action.ActionForm;
import
org.apache.struts.action.ActionForward;
import
org.apache.struts.action.ActionMapping;
import
org.apache.struts.action.ActionMessage;
import
org.apache.struts.action.ActionMessages;
import
org.apache.struts.validator.DynaValidatorActionForm;
public
class
SupprimerElementCoursesAction extends
Action {
public
ActionForward execute
(
final
ActionMapping pMapping,
ActionForm pForm, final
HttpServletRequest pRequete,
final
HttpServletResponse pReponse) {
// Récupère l'identifiant de l'élément dans le formulaire
final
DynaValidatorActionForm lForm =
(
DynaValidatorActionForm)pForm;
final
Long lIdObjet =
new
Long
(
lForm.getString
(
"idobjet"
));
// Suppression en base de l'enregistrement
final
ListeCoursesDAO lListeCoursesDAO =
new
ListeCoursesDAO
(
);
final
String lErreur =
lListeCoursesDAO.supprimerElementCourse
(
lIdObjet);
if
(
lErreur ==
null
) {
// S'il n'y a pas d'erreurs, on retourne le forward "succes"
return
pMapping.findForward
(
"succes"
);
}
else
{
final
ActionMessages lErreurs =
getErrors
(
pRequete);
final
ActionMessage lActionMessage =
new
ActionMessage
(
lErreur, false
);
lErreurs.add
(
Globals.ERROR_KEY, lActionMessage);
saveErrors
(
pRequete, lErreurs);
// S'il y a des erreurs, on retourne le forward "erreur"
return
pMapping.findForward
(
"erreur"
);
}
}
}
VII-A-3. Création d'un nouveau fichier d'internationalisation▲
Créer un nouveau fichier d'internationalisation dans le dossier "src"/"com"/"developpez"/"rpouiller"/"monapplication" sous le nom "ResourcesSuppression.properties".
Remplir le fichier "ResourcesSuppression.properties" avec :
titre.suppression.elementcourses
=Suppression d'élément de la liste de courses
suppression.supprimer.libelle
=Supprimer
VII-A-4. Création d'un nouveau fichier de configuration "struts-config-suppression.xml"▲
Créer un fichier XML "struts-config-suppression.xml" dans "WebContent/WEB-INF".
Remplir le fichier "struts-config-suppression.xml" avec :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd"
>
<struts-config>
<!-- ========== Formulaire ============================== -->
<form-beans>
<form-bean
name
=
"suppressionForm"
type
=
"org.apache.struts.validator.DynaValidatorActionForm"
>
<form-property
name
=
"idobjet"
type
=
"java.lang.String"
/>
</form-bean>
</form-beans>
<!-- ========== Mapping des actions ============================== -->
<action-mappings>
<action path
=
"/AfficherSuppressionElementCourses"
name
=
"suppressionForm"
type
=
"com.developpez.rpouiller.monapplication.AfficherListeCoursesAction"
scope
=
"request"
validate
=
"false"
attribute
=
"bean"
>
<forward
name
=
"succes"
path
=
"/pages/suppression.jsp"
/>
<forward
name
=
"erreur"
path
=
"/pages/erreur.jsp"
/>
</action>
<action path
=
"/SupprimerSuppressionElementCourses"
name
=
"suppressionForm"
type
=
"com.developpez.rpouiller.monapplication.SupprimerElementCoursesAction"
scope
=
"request"
validate
=
"false"
attribute
=
"bean"
>
<forward
name
=
"succes"
path
=
"/AfficherSuppressionElementCourses.do"
/>
<forward
name
=
"erreur"
path
=
"/pages/erreur.jsp"
/>
</action>
</action-mappings>
<!-- ========== Ressources de definitions de messages =========================== -->
<message-resources
parameter
=
"com.developpez.rpouiller.monapplication.ResourcesSuppression"
key
=
"suppression"
/>
</struts-config>
VII-A-5. Modification du fichier "web.xml"▲
Modidier la déclaration du paramétrage de la servlet "org.apache.struts.action.ActionServlet" dans le fichier "web.xml".
<!-- Configuration de l'action servlet -->
<servlet>
<servlet-name>
action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>
config</param-name>
<param-value>
/WEB-INF/struts-config.xml,
/WEB-INF/struts-config-creation.xml,
/WEB-INF/struts-config-suppression.xml
</param-value>
</init-param>
<load-on-startup>
1</load-on-startup>
</servlet>
VII-A-6. Création de la JSP de suppression▲
Créer une JSP "suppression.jsp" dans "pages".
Remplir "suppression.jsp" avec :
<%@
page
language
=
"java"
contentType
=
"text/html; charset=ISO-8859-1"
pageEncoding=
"ISO-8859-1"
%>
<%@
taglib
prefix
=
"html"
uri
=
"http://struts.apache.org/tags-html"
%>
<%@
taglib
prefix
=
"bean"
uri
=
"http://struts.apache.org/tags-bean"
%>
<%@
taglib
prefix
=
"logic"
uri
=
"http://struts.apache.org/tags-logic"
%>
<%@
taglib
prefix
=
"nested"
uri
=
"http://struts.apache.org/tags-nested"
%>
<html
:
html
>
<head>
<title><bean
:
message
key=
"titre.suppression.elementcourses"
bundle=
"suppression"
/></title>
</head>
<body>
<html
:
form
action=
"/SupprimerSuppressionElementCourses.do"
>
<nested
:
hidden
styleId=
"idobjet"
property=
"idobjet"
/>
<table border=
"1"
>
<thead>
<tr>
<th><bean
:
message
key=
"colonne.identifiant"
/></th>
<th><bean
:
message
key=
"colonne.libelle"
/></th>
<th><bean
:
message
key=
"colonne.quantite"
/></th>
<th>
</th>
</tr>
</thead>
<tbody>
<logic
:
iterate
id=
"elementCourse"
name=
"LISTE_COURSES"
type=
"com.developpez.rpouiller.monapplication.ElementCourseBean"
>
<tr>
<bean
:
define
id=
"idObjet"
name=
"elementCourse"
property=
"idObjet"
/>
<td><bean
:
write
name=
"elementCourse"
property=
"idObjet"
/></td>
<td><bean
:
write
name=
"elementCourse"
property=
"libelle"
/></td>
<td><bean
:
write
name=
"elementCourse"
property=
"quantite"
/></td>
<td>
<a href=
"#"
onclick=
"document.getElementById('idobjet').value = ${idObjet}; document.forms[0].submit();"
>
<bean
:
message
key=
"suppression.supprimer.libelle"
bundle=
"suppression"
/>
</a>
</td>
</tr>
</logic
:
iterate
>
</tbody>
</table>
</html
:
form
>
</body>
</html
:
html
>
VII-A-7. Déploiement de l'application▲
Si le serveur est à l'état "Restart" (Il faut qu'il soit à l'état "Synchronized") : Sélectionner le serveur Tomcat dans la vue "Servers". Faire un clic droit sur le serveur Tomcat. Puis sélectionner "Restart".
Ouvrir un navigateur web à l'adresse : http://localhost:8080/MonApplication/AfficherSuppressionElementCourses.do.
VII-A-8. Vérification▲
Lorsque l'on clique sur un "supprimer" (le dernier dans ce cas), l'application doit supprimer un enregistrement et l'afficher ensuite.
VII-B. Fonctionnement de l'ensemble▲
Au démarrage de l'application, la modification du fichier "web.xml" indique que la servlet "org.apache.struts.action.ActionServlet" est initialisée par trois fichiers de configuration.
Le fichier "struts-config-suppression.xml" déclare deux actions (une d'affichage et une de suppression) et un formulaire. Ces deux actions ont le même formulaire.
Lors de l'appel "http://localhost:8080/MonApplication/AfficherSuppressionElementCourses.do", la servlet "org.apache.struts.action.ActionServlet" est exécutée (url terminée par ".do"). Elle utilise le mapping des actions contenues dans "struts-config-suppression.xml", pour appeler l'action "com.developpez.rpouiller.monapplication.AfficherListeCoursesAction".
L'action appelle la DAO afin d'obtenir la liste des enregistrements contenus en base. Elle stocke la liste des enregistrements dans la "requête". Si tout s'est bien passé, elle demande de forwarder vers le mapping "succes" ("/pages/suppression.jsp"). Ou en cas d'erreur, elle demande de forwarder vers le mapping "erreur" ("/pages/erreur.jsp").
La DAO "ListeCoursesDAO" utilise la ressource JDBC pour accéder à la base. Elle fournit une méthode retournant les informations contenues dans la table "LISTECOURSES".
La JSP "/pages/suppression.jsp" affiche un tableau avec les valeurs contenues dans la requête. Chaque ligne du tableau comporte un lien de suppression de l'objet. Ce lien exécute du Javascript qui stocke l'identifiant de l'objet à supprimer dans un champ caché ("nested:hidden"), puis soumet le formulaire.
La JSP "/pages/erreur.jsp" affiche les erreurs stockées dans la requête.
Lors du clic sur le lien "Supprimer", le Javascript associé au lien est exécuté. Un champ du formulaire est mis à jour avec la valeur de l'identifiant de l'objet de la ligne et le formulaire est soumis au serveur Tomcat.
L'action de suppression "com.developpez.rpouiller.monapplication.SupprimerElementCoursesAction" est exécutée. Elle récupère l'identifiant depuis le formulaire. Elle demande à la DAO de supprimer l'enregistrement correspondant. Si tout s'est bien passé, elle demande de forwarder vers le mapping "succes" (action d'affichage). Ou en cas d'erreur, elle demande de forwarder vers le mapping "erreur" ("/pages/erreur.jsp").
La méthode "supprimerElementCourse" de la DAO "ListeCoursesDAO" supprime l'enregistrement dans la table "LISTECOURSES" avec l'identifiant passé en paramètre.