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".
/**
* 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();
}
}Faire un clic droit dans le source. Choisir "Source"/"Organize Imports".
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.
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 :
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 :
<?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".
<!-- 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>VI-A-6. Création de la JSP de création▲
Créer une JSP "creation.jsp" dans "pages".
Remplir "creation.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.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 :
<?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 :
<!-- ========== 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>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".
Ouvrir un navigateur web à l'adresse : http://localhost:8080/MonApplication/AfficherCreationElementCourses.do.
VI-A-11. Vérification▲
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".











