Cette page n'est pas du tout un tutorial Struts. Ce sont simplement quelques notes et captures d'écrans prises lors du développement d'une petite application Web avec Struts.
Nous pouvons définir la configuration du site par le fichier web.xml qui se trouve dans le répertoire WEB-INF.
Nous pouvons spécifier la page d'accueil de l'application par la balise <welcome-file>.
Nous pouvons définir les associations des URL selon le patron suivant : /action/*, si nous placerons dans un répertoire view/action toutes nos classes Java qui étendent Action.
Nous devons ensuite définir les différentes « librairies de balises » (en anglais, “tag-libs”) qui seront utilisées par Struts. Nous pouvons utiliser n'importe quelle chaîne de caractères pour référencer la librairie dans la balise <taglib-uri>, mais nous devrons par la suite veiller à respecter cette référence dans nos pages lors de l'utilisation des balises <%@ taglib.
Par convention, nous utiliserons l'adresse du fichier tld de la librairie en question.
Exemple d'utilisation dans une page :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "file:///H:/refs/dtd/web-app_2_3.dtd"> <web-app> <display-name>First application</display-name> <description>My first application in Struts</description> <servlet> <servlet-name>servlet</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</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>servlet</servlet-name> <url-pattern>/action/*</url-pattern> <!-- used for path mapping --> </servlet-mapping> <welcome-file-list> <welcome-file>/jsp/index.jsp</welcome-file> </welcome-file-list> <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <!-- name used for <%@ taglib uri=" declaration --> <taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location> </taglib> </web-app>
C'est dans ce fichier que nous pouvons effectuer les mappings entre les beans (qui vont contenir les informations récoltées dans les formulaires) et les actions.
Dans cet exemple, si nous spécifions action="logon.do" dans un formulaire, Struts vérifie s'il existe une action dont path="/logon". Cette action est référencée ici sous le nom logonform.
Sous ce même nom, nous avons défini un form-bean qui nous permet de lui associer la classe qui contient les éléments du formulaire.
Nous pouvons définir des exceptions globales sous la balise <global-exceptions>.
De la même manière, nous pouvons définir des adresses globales sous <global-forwards>.
La balise <message-resources permet de définir l'emplacement des fichiers d'internationnalisation. Le nom de fichier est utilisé sans information de localisation (fr, en, nl, etc), ni d'extension .properties.
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "file:///H:/refs/dtd/struts-config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="logonform" type="view.form.LogonForm" /> </form-beans> <global-exceptions> <exception key="global.error.credentials" path="/jsp/logon.jsp" scope="request" type="javax.naming.AuthenticationException" /> </global-exceptions> <global-forwards /> <action-mappings> <action path="/logon" type="view.action.LogonAction" scope="request" name="logonform" validate="true" input="/jsp/logon.jsp"> <forward name="success" path="/jsp/application.jsp" redirect="false" /> </action> </action-mappings> <message-resources parameter="props.application" null="false" /> </struts-config>
Exemple de fichier de messages.
Il suffit de réaliser le fichier une première fois complètement, puis de le copier et de remplacer les messages dans la langue souhaitée et d'ajouter la localisation (fr, en, nl, etc) entre le nom et l'extension de fichier.
Dans la partie que nous avons nommé validator nous devons indiquer ce qu'il faut afficher en cas d'erreur selon les critères de validation de Struts.
Nous avons demandé ces validations en indiquant validate="true" pour notre action dans le fichier struts-config.xml.
Le numéro entre accolades indique l'index de la valeur de substitutions qui est passée dans le message.
Dans la partie que nous avons nommé LogonForm, nous retrouvons les différents textes à afficher par exemple dans notre action, ou dans le formulaire.
Nous pouvons créer autant de messages que nous le souhaitons. Nous pouvons les nommer selon une notation séparée par des points, afin de les structurer, ou mieux visualiser à quelle action ils appartienent.
# -- standard errors -- errors.header=<table border="0" cellpadding="5" cellspacing="1" class="table" align="center"><tr><th>Error</th></tr> errors.prefix=<tr class="td"><td> errors.suffix=</td></tr> errors.footer=</table> # -- validator -- errors.invalid={0} is invalid. errors.maxlength={0} can not be greater than {1} characters. errors.minlength={0} can not be less than {1} characters. errors.range={0} is not in the range {1} through {2}. errors.required={0} is required. errors.byte={0} must be a byte. errors.date={0} is not a date. errors.double={0} must be an double. errors.float={0} must be an float. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.short={0} must be an short. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. # -- LogonForm -- logonForm.button.submit.tooltip=Click to log on logonForm.button.submit.label=Log On logonForm.logon.label=Logon logonForm.password.label=Password logonForm.logon=logon logonForm.password=password # -- Global Exceptions -- global.error.credentials=Invalid Credentials
Nous créons une page JSP qui contient un formulaire (des champs et un bouton pour soumettre le formulaire).
Dans l'action du formulaire, nous spécifions une action Struts. Par exemple, monaction.do, qui sera utilisée par Struts sous la forme /monaction.
Si nous avons défini dans struts-config.xml une action dont le path correspond à cette structure /monaction, le chemin vers la classe Java est trouvé grâce à l'attribut type. Il est possible de déterminer le champ d'application(“scope request”, “session”, “application”).
Si nous désirons valider la structure des données du formulaire, nous spécifions validate="true", et nous indiquons sous l'attribut input la page à afficher en cas d'échec, ou l'action à exécuter.
Comme nous désirons effectuer une validation, nous devons surcharger la méthode validate de l'ActionForm. Cette validation portera sur la structure des données, alors que la validation de leur sémantique sera effectuée dans une méthode de notre classe qui étend Action.
Notre ActionForm peut étendre ValidatorForm au lieu de simplement ActionForm, mais dans ce cas, nous devons utiliser le fichier validator-rules.xml qui se trouvera lui aussi dans WEB-INF.
Dans struts-config.xml, nous devons spécifier dans form-bean un ActionForm associé à notre action. Pour les associer, nous devons leur donner la même valeur pour leurs attributs name.
La page suivante propose un exemple de projet qui met en pratique ces différentes notions.
Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.
7 mots clés dont 0 définis manuellement (plus d'information...).
Avertissement
Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.
Recherche (afficher)
Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
Citation (masquer)