Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

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

Struts


précédentsommairesuivant

VI. CREATION DE DONNEES EN BASE

VI-A. Etape 7 : Création d'enregistrements dans la base de données

VI-A-1. Modification de la classe DAO

Ajouter la méthode "creerElementCourse" dans la classe "ListeCoursesDAO".

 
Sélectionnez
	/**
	 * Crée un nouvel élément dans la liste des courses
	 * @param pLibelle Libellé du nouvel élément
	 * @param pQuantite Quantité du nouvel élément
	 * @return Erreur s'il y a lieu
	 */
	public String creerElementCourse(final String pLibelle, final Integer pQuantite) {
		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("INSERT INTO LISTECOURSES(LIBELLE, QUANTITE) VALUES(?, ?)");
			lPreparedStatementCreation.setString(1, pLibelle);
			lPreparedStatementCreation.setInt(2, pQuantite);
			lPreparedStatementCreation.executeUpdate();
			
			return null;
		} catch (NamingException e) {
			return "NamingException : " + e.getMessage();
		} catch (SQLException e) {
			return "SQLException : " + e.getMessage();
		}
	}
Image non disponible

Faire un clic droit dans le source. Choisir "Source"/"Organize Imports".

Image non disponible

VI-A-2. Création de la classe Action de création

Créer une classe "CreerElementCoursesAction" 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 CreerElementCoursesAction extends Action {

	public ActionForward execute(final ActionMapping pMapping,
			ActionForm pForm, final HttpServletRequest pRequete,
			final HttpServletResponse pReponse) {

		// Récupère les informations du formulaire
		final DynaValidatorActionForm lForm = (DynaValidatorActionForm)pForm;
		final String lLibelle = lForm.getString("libelle");
		final Integer lQuantite = new Integer(lForm.getString("quantite"));

		// Création en base du nouvel enregistrement
		final ListeCoursesDAO lListeCoursesDAO = new ListeCoursesDAO();
		final String lErreur = lListeCoursesDAO.creerElementCourse(lLibelle, lQuantite);

		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");
		}
	}
}

VI-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 "ResourcesCreation.properties".

Remplir le fichier "ResourcesCreation.properties" avec :

 
Sélectionnez
titre.creation.elementcourses=Création d'élément de la liste de courses
creation.elementcourses.libelle.libelle=Libellé
creation.elementcourses.libelle.quantite=Quantité

creation.libelle.error.required=Le libellé est nécessaire.
creation.quantité.error.required=La quantité est nécessaire.
creation.quantité.error.integer=La quantité doit être numérique.

VI-A-4. Création d'un nouveau fichier de configuration "struts-config-creation.xml"

Créer un fichier XML "struts-config-creation.xml" dans "WebContent/WEB-INF".

Remplir le fichier "struts-config-creation.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="creationForm" type="org.apache.struts.validator.DynaValidatorActionForm">

        <form-property name="libelle" 	type="java.lang.String" />
        <form-property name="quantite" 	type="java.lang.String" />
			
	</form-bean>		
  </form-beans>

  <!-- ========== Mapping des actions ============================== -->
  <action-mappings>

    <action    path      = "/AfficherCreationElementCourses"
               name      = "creationForm"
               type      = "com.developpez.rpouiller.monapplication.AfficherListeCoursesAction"
               scope     = "request"
               validate  = "false"
               attribute = "bean">
               
        <forward name="succes" path="/pages/creation.jsp"  />
        <forward name="erreur" path="/pages/erreur.jsp"  />
    </action>

    <action    path      = "/CreerCreationElementCourses"
               name      = "creationForm"
               type      = "com.developpez.rpouiller.monapplication.CreerElementCoursesAction"
               scope     = "request"
               validate  = "true"
               attribute = "bean" 
               input     = "/AfficherCreationElementCourses.do">
               
        <forward name="succes" path="/AfficherCreationElementCourses.do"  />
        <forward name="erreur" path="/pages/erreur.jsp"  />
    </action>
  </action-mappings>
  
  <!-- ========== Ressources de definitions de messages =========================== -->
  <message-resources parameter="com.developpez.rpouiller.monapplication.ResourcesCreation" key="creation" />

</struts-config>

VI-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
				</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
Image non disponible

VI-A-6. Création de la JSP de création

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

Remplir "creation.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.creation.elementcourses" bundle="creation"/></title>
	</head>
	<body>
		<b><i><html:errors/></i></b><br/>
		<html:form action="/CreerCreationElementCourses.do">
  			<bean:message key="creation.elementcourses.libelle.libelle" bundle="creation"/>
			<nested:text property="libelle"/><br>
  			<bean:message key="creation.elementcourses.libelle.quantite" bundle="creation"/>
			<nested:text property="quantite"/><br>
			<html:submit/>
		</html:form>
		<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>
				</tr>
			</thead>
			<tbody>
				<logic:iterate id="elementCourse" name="LISTE_COURSES" type="com.developpez.rpouiller.monapplication.ElementCourseBean">
					<tr>
						<td><bean:write name="elementCourse" property="idObjet"/></td>
						<td><bean:write name="elementCourse" property="libelle"/></td>
						<td><bean:write name="elementCourse" property="quantite"/></td>
					</tr>
				</logic:iterate>
			</tbody>
		</table>		
	</body>
</html:html>

VI-A-7. Création du fichier de validation "validation-creation.xml"

Créer un fichier XML "validation-creation.xml" dans "WebContent/WEB-INF".

Remplir le fichier avec :

 
Sélectionnez
<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">

<form-validation>

	<formset>
		<form name="/CreerCreationElementCourses">
			<!-- Contraintes sur le champ libelle : obligatoire -->
			<field property="libelle" depends="required">
				<msg name="required" key="creation.libelle.error.required" bundle="creation"/>
			</field>
			<!-- Contraintes sur le champ quantite : obligatoire et numerique -->
			<field property="quantite" depends="required, integer">
				<msg name="required" key="creation.quantité.error.required" bundle="creation"/>
				<msg name="integer" key="creation.quantité.error.integer" bundle="creation"/>
			</field>
		</form>
	</formset>
	
</form-validation>

VI-A-8. Modification du fichier de configuration "struts-config.xml"

Rajouter la déclaration des validations dans "struts-config.xml" après la déclaration des ressources de messages :

 
Sélectionnez
  <!-- ========== Validation des formulaires =========================== -->
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"
                value="/org/apache/struts/validator/validator-rules.xml,
                      /WEB-INF/validation-creation.xml" />
  </plug-in>
Image non disponible

VI-A-9. 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/AfficherCreationElementCourses.do.

Image non disponible

VI-A-11. Vérification

L'application doit vérifier que les champs "libelle" et "quantite" sont renseignés.

Image non disponible

L'application doit vérifier que le champ "quantite" est bien numérique.

Image non disponible

L'application doit stocker le nouvel enregistrement et l'afficher ensuite.

Image non disponible

VI-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 deux fichiers de configuration.

La modification effectuée dans "struts-config.xml" indique les fichiers de validation de formulaire. Le fichier "validator-rules.xml" est contenue dans la librairie "struts-core-1.3.8.jar". Le chemin correspond au chemin dans le classpath.

Le fichier "validation-creation.xml" indique les conditions de validation du formulaire (champs obligatoires, numériques, etc...) et les messages correspondants aux erreurs de validation.

Le fichier "struts-config-creation.xml" déclare deux actions (une d'affichage et une de création) et un formulaire. Ces deux actions ont le même formulaire. Mais, seule l'action de création nécessite une validation du formulaire.

Lors de l'appel "http://localhost:8080/MonApplication/AfficherCreationElementCourses.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-creation.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/creation.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/creation.jsp" affiche un formulaire de création et un tableau avec les valeurs contenues dans la requête. Le tag "nested:text" permet de saisir une propriété du formulaire (déclarée dans le fichier "struts-config-creation.xml"). Le tag "html:submit" correspond au bouton "Submit".

La JSP "/pages/erreur.jsp" affiche les erreurs stockées dans la requête.

Lors du clic sur le bouton "Submit", le formulaire est soumis au serveur Tomcat.

Le formulaire est tout d'abord validé par les critères définis dans "validation-creation.xml". Les deux champs sont indiqués obligatoires ("required") et le champ "quantite" est également indiqué numérique ("integer").

En cas d'erreur dans la validation, les messages d'erreur sont stockés dans la requête et l'application forwarde vers l'action d'affichage, soit celle spécifiée dans l'attribut input du mapping.

En cas de validation réussie, l'action de création "com.developpez.rpouiller.monapplication.CreerElementCoursesAction" est exécutée. Elle récupère le libellé et la quantité depuis le formulaire. Elle demande à la DAO de créer un nouvel enregistrement. 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 "creerElementCourse" de la DAO "ListeCoursesDAO" crée un nouvel enregistrement dans la table "LISTECOURSES".


précédentsommairesuivant

  

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.