IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction à STRUTS2 par l'exemple


précédentsommairesuivant

VII. Exemple 05B - Navigation dans un formulaire de saisie

Nous étudions un formulaire présentant plusieurs boutons pour soumettre (submit) les données saisies à une action.

Image non disponible

VII-A. Le projet Netbeans

Le projet Netbeans est le suivant :

Image non disponible

Les éléments du projet sont les suivants :

  • [DoSomething.jsp] : l'unique vue de l'application qui présente les trois boutons de navigation ainsi qu'un lien.
  • [DoSomething.java] et [DoSomethingElse.java] : les deux actions du projet
  • [messages.properties] : le fichier des messages internationalisés
  • [struts.xml] : le fichier de configuration Struts 2

VII-B. Configuration

Le fichier [struts.xml] suivant configure l'application :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 <constant name="struts.custom.i18n.resources" value="messages" />
 <package name="actions" namespace="/actions" extends="struts-default">
    <action name="DoSomething" class="actions.DoSomething">
      <result name="success">/vues/DoSomething.jsp</result>
    </action>  
    <action name="DoSomethingElse" class="actions.DoSomethingElse">
      <result name="success">/vues/DoSomething.jsp</result>
    </action>  
  </package>
</struts>
  • l'action [/actions/DoSomething] provoquera l'instanciation de la classe [actions.DoSomething] et sa méthode execute sera exécutée par défaut. Ce défaut peut être annulé si les paramètres passés à l'action [Something] précisent une autre méthode. Quelque soit la méthode exécutée, elle devra rendre la clé de navigation success puisque seule cette clé a été définie. La vue [DoSomething.jsp] sera alors affichée.
  • la configuration de l'action [/actions/DoSomethingElse] est identique.

VII-C. Le fichier des messages

Le fichier des messages [messages.properties] est le suivant :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
formulaire.titre1=Actions et M\u00e9thodes
formulaire.titre2=Actions et M\u00e9thodes
formulaire.execute=DoSomething.execute
formulaire.action1=DoSomething.action1
formulaire.action2=DoSomethingElse.action2
formulaire.action3=DoSomething.action3

VII-D. La vue [DoSomething.jsp]

La vue [DoSomething.jsp] est la suivante :

Image non disponible

Son code est le suivant :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title><s:text name="formulaire.titre1"/></title>
  </head>
  <body>
    <h1><s:text name="formulaire.titre2"/></h1>
    <s:form action="DoSomething">
      <s:submit key="formulaire.execute"/>
      <s:submit key="formulaire.action1" method="action1"/>
      <s:submit key="formulaire.action2" action="DoSomethingElse" method="action2"/>
    </s:form>
    <s:url id="url" action="DoSomething" method="action3"/>
    <s:a href="%{url}"><s:text name="formulaire.action3"/></s:a>
  </body>
</html>
  • ligne 11 : le formulaire sera posté à l'action [DoSomething]. Cela ne veut pas forcément dire que c'est cette action qui va être déclenchée. Cela dépend du bouton submit utilisé pour le POST.
  • ligne 12 : le bouton submit ne précise ni action, ni méthode. Ce sera l'action [DoSomething] précisée par la balise <form> qui sera instanciée. La méthode exécutée sera celle définie dans le fichier [struts.xml], la méthode execute.
  • ligne 13 : le bouton submit précise une méthode. Ce sera l'action [DoSomething] précisée par la balise <form> qui sera instanciée. La méthode exécutée sera la méthode action1.
  • ligne 14 : le bouton submit précise une action et une méthode. Ce sera l'action [DoSomethingElse] qui sera instanciée. La méthode exécutée sera la méthode action2.
  • lignes 16-17 : un lien vers l'action [DoSomething] et la méthode action3. L'action [DoSomething] sera instanciée et sa méthode action3 exécutée. Contrairement aux boutons submit, le clic sur le lien ne provoque pas un POST mais un GET. Il n'y a donc aucun paramètre posté.

Le code Html généré par ce code, lorsqu'on demande l'Url [http://localhost:8084/exemple-05B/actions/DoSomething.action] est le suivant :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Actions et Méthodes</title>
  </head>
  <body>
    <h1>Actions et Méthodes</h1>
    <form ... action="/exemple-05B/actions/DoSomething.action" method="post">
...
       <input type="submit" ... name="formulaire.execute" value="DoSomething.execute"/>
...
       <input type="submit" ... name="method:action1" value="DoSomething.action1"/>
...
        <input type="submit" ... name="action:DoSomethingElse!action2" value="DoSomethingElse.action2"/>
...
    </form>
    ...
    <a href="/exemple-05B/actions/DoSomething!action3.action">DoSomething.action3</a>
  </body>
</html>
  • ligne 9 : la balise form du formulaire Html. L'attribut action indique l'Url à laquelle seront postés les paramètres du formulaire. Cette Url est celle de l'action [DoSomething].
  • lignes 11, 13, 15 : les attributs name des boutons seront postés à l'action cible du bouton submit. C'est ce qui permet à Struts de déterminer l'action à instancier et la méthode à exécuter.
  • ligne 13 : l'attribut name=method:action1 indique que la méthode DoSomething.action1 doit être exécutée.
  • ligne 15 : l'attribut name= action:DoSomethingElse!action2 indique que la méthode DoSomethingElse.action2 doit être exécutée.
  • ligne 11 : l'attribut name= formulaire.execute ne précise ni action, ni méthode. C'est donc la méthode DoSomething.execute qui sera exécutée.
  • ligne 19 : le lien demande explicitement l'exécution de la méthode DoSomething.action3

VII-E. Les actions

L'action [DoSomething] est la suivante :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package actions;

import com.opensymphony.xwork2.ActionSupport;

public class DoSomething extends ActionSupport {

  public DoSomething() {
    System.out.println("DoSomething");
  }

  @Override
  public String execute() {
    System.out.println("DoSomething.execute");
    return SUCCESS;
  }

  public String action1() {
    System.out.println("DoSomething.action1");
    return SUCCESS;
  }

  public String action3() {
    System.out.println("DoSomething.action3");
    return SUCCESS;
  }
}
  • les méthodes execute, action1 et action3 écrivent sur la console du serveur web et rendent la clé de navigation success.
  • ligne 8 : le constructeur écrit également sur la console du serveur web

Les différentes écritures sur la console permettent de savoir quelles méthodes sont exécutées lors d'une requête.

L'action [DoSomethingElse] est similaire :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
package actions;

import com.opensymphony.xwork2.ActionSupport;

public class DoSomethingElse extends ActionSupport {

  public DoSomethingElse() {
    System.out.println("DoSomethingElse");
  }
  
  @Override
  public String execute() {
    System.out.println("DoSomethingElse.execute");
    return SUCCESS;
  }
  
  public String action2() {
    System.out.println("DoSomethingElse.action2");
    return SUCCESS;
  }
}

VII-F. Les tests

Les tests montrent les résultats suivants (sur la console du serveur web) :

  • lors d'un clic sur le bouton [DoSomething.execute], l'action [DoSomething] est instanciée et sa méthode execute exécutée.
  • lors d'un clic sur le bouton [DoSomething.action1], l'action [DoSomething] est instanciée et sa méthode action1 exécutée.
  • lors d'un clic sur le bouton [DoSomethingElse.action2], l'action [DoSomethingElse] est instanciée et sa méthode action2 exécutée.
  • lors d'un clic sur le lien [DoSomething.action3], l'action [DoSomething] est instanciée et sa méthode action3 exécutée.

précédentsommairesuivant

Licence Creative Commons
Le contenu de cet article est rédigé par Serge Tahe et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2012 Developpez.com.