Application Struts pas à pas avec Eclipse (Web Tools Platform) et Tomcat

Struts


précédentsommairesuivant

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".

 
Sélectionnez
	/**
	 * 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();
		}
	}
Image non disponible

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.

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
<?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".

 
Sélectionnez
	<!-- 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>
Image non disponible

VII-A-6. Création de la JSP de suppression

Créer une JSP "suppression.jsp" dans "pages".

Remplir "suppression.jsp" avec :

 
Sélectionnez
<%@ 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>&nbsp;</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".

Image non disponible

Ouvrir un navigateur web à l'adresse : http://localhost:8080/MonApplication/AfficherSuppressionElementCourses.do.

Image non disponible

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.

Image non disponible

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.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2008 Régis POUILLER. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.