# Applications web avec Struts 2, Maven et jQuery/Version imprimable

* Si vous imprimez cette page, choisissez « Aperçu avant impression » dans votre navigateur, ou cliquez sur le lien Version imprimable dans la boîte à outils, vous verrez cette page sans ce message, ni éléments de navigation sur la gauche ou en haut.
* Cliquez sur Rafraîchir cette page pour obtenir la dernière version du wikilivre.
* Pour plus d'informations sur les version imprimables, y compris la manière d'obtenir une version PDF, vous pouvez lire l'article Versions imprimables.
Une version à jour et éditable de ce livre est disponible sur Wikilivres, une bibliothèque de livres pédagogiques, à l'URL : https://fr.wikibooks.org/wiki/Applications_web_avec_Struts_2,_Maven_et_jQuery

# Introduction
## Pourquoi Struts ?

* Wikipédia propose un article sur : « Apache Struts ».
Parmi les nombreux frameworks d'application web Java disponibles, Stuts présente les caractéristiques suivantes :
* L'ensemble de l'application peut être écrite en POJO, il n'y a pas de dépendances vers des composants JEE, Spring ou autre composants lourds. On peut donc tester les actions Struts comme de simple classe, un simple outil de test unitaire tel que JUnit.
* Struts a une culture d'indépendance, c'est vous qui faites les choix.
** Struts est indépendant de la technologie utilisée pour le rendu, on peut utiliser de simples JSP ou des templates Velocity ou FreeMarker.
** Struts n'essaie pas de gérer AJAX, vous pouvez adopter votre framework JavaScript préféré.
* Struts est un frawework qui suit une architecture MVC et est orienté actions, par opposition aux frameworks orientés composants (Apache Tapestry, Apache Wicket pour ne citer qu'eux).
* Struts est reconnu comme une brique strandard et éprouvée. Par exemple, Le référentiel ACAÏ, publié par le Service pour le développement de l'administration électronique de la Direction Générale de la Modernisation de l’État recommande d'utiliser Struts dans les applications Java pour la réalisation des sites intranet ou extranet.
* Struts est un projet open-source, sous la très permissive licence Apache et est hébergé par la fondation Apache.

## Pourquoi Maven ?

* Wikipédia propose un article sur : « Apache Maven ».
Maven est un outil de build pour projets Java parmi les plus puissants. En ce qui nous préoccupe ici, Maven nous permettra (en une ligne de commande)
* De fournir à notre application toutes les dépendances dont elles a besoin : Struts et ses différentes plug-ins ;
* De packager l'application au format war, le format pour les application Web en Java ;
* De compiler les JSP en amont (habituellement, elles ne le sont qu'au dernier moment, quand on accède à la page pour la première fois) pour vérifier qu'elles sont bien écrites sans se laisser la surprise ;
* De lancer l'application pour la tester avec votre navigateur préféré. Ainsi, pas de serveur d'application à installer sur votre machine ni de déploiement à la main de l'application, ce qui s'avère souvent répétitif quand on développe de façon incrémentale et qu'on veut tester vite ce qu'on vient de modifier.

## Pourquoi jQuery ?

* Wikipédia propose un article sur : « jQuery ».
Comme nous l'avons indiqué, Struts ne permet pas nativement de faire du AJAX ou des formulaires dynamiques. Si vous souhaitez réaliser des pages dynamiques avec JavaScript, vous devez utiliser le framework JavaScript de votre choix. Nous avons fait le choix de jQuery, pour plusieurs raisons :
* Il existe un plugin jQuery pour Struts qui permet d'inclure simplement jQuery dans les en-têtes des pages web générées. En plus, ce plug-in ajoute des taglibs qui vous faciliteront la tâche quand vous écrirez des pages dynamiques.
* Parmi les frameworks javaScript (qui sont des concepts encore nouveaux), jQuery semble être une solution de prédilection. Pour savoir cela, nous nous sommes appuyés sur les faits suivants :
** Des solutions majeures telles que Ruby on Rails et Drupal sont livrées avec jQuery ;
** jQuery est le plus populaire si on en croit de nombreux sondages (1, 2, 3) et les tendances selon Google Trends.

## Références

* ↑ Il est possible de consulter ce référentiel sur le site du ministère.

# Démarrer le projet
## Installation
### Struts

Disponible ici.

### Maven

    Pour plus de détails voir : Développer en Java/Introduction à Apache Maven.

### jQuery

    Pour plus de détails voir : Programmation JavaScript/jQuery.
Il suffit de télécharger le fichier.

## Configuration
# Débogguer l'application
## Être strict avec OGNL

Dans le fichier struts.properties :

## En savoir plus sur le contexte dans une page

Dans une JSP, on peut ajouter :

## Utiliser l'intercepteur Debugging

Pour l'activer, il suffit d'ajouter à la main, directement dans l'URL une valeur au paramètre debug

### ?debug=browser

« Debugging Struts » dans la documentation officielle

## Conversion de types

« Type Conversion » dans la documentation officielle

# Améliorer les performances
## Utiliser le cache FreeMarker

Même si vous n'utilisez pas FreeMarker dans vos vues, Struts cherche des templates dans le classpath, provoquant des temps de rendus de page longs.
On peut remédier au problème, dans struts.properties :
Il faut ensuite créer un fichier freemarker.properties à côté du struts.properties et y ajouter

## Références

* ↑ Voir l'article Freemarker Template Caching – Analyzing a Struts2 Performance Problem
* « Perfomance tuning » dans la documentation officielle

# Formulaires

Ajouter disabled="true" sur un champ a deux effets :
* L'élément HTML généré aura disabled="disabled"
* La valeur du paramètre ne sera pas injecté dans l'action (le setter ne sera pas appelé)

# Divers/Accéder à une variable dans une itération

Pour récupérer la variable utilisée dans une itération :

# Réaliser des pages dynamiques avec jQuery
## Mettre en place jQuery

Nous allons utiliser struts-jquery. Attention à ne pas le confondre avec struts2-jquery-plugin.
Dans le pom :
Dans les JSP qui utilisent jQuery, il faut déclarer la taglig pour rendre tous les tags struts-jQuery disponibles :
Dans la JSP chargée de générer l'entête (tag <head>) des pages générées, il faudra ajouter :

# Réaliser des pages dynamiques avec jQuery/Grilles

Au moment de générer l'URL vers l'action JSON, ne pas oublier escapeAmp="false", sinon l'URL sera mal formatée au moment de la requête et les paramètres ne seront pas injectés dans l'action.

# Ressources externes
## Bibliographie

* (en) Dave Newton, Apache Struts 2 Web Application Development : Design, develop, test, and deploy your web applications using the Struts 2 framework, Birmimgham - Mumbai, Packt Publishing, juin 2009, 359 p. (ISBN 978-1-847193-39-1, lire en ligne)Ce livre est une bonne introduction malgré quelques manques pour mettre en place la validation.
* (en) Ian Roughley, Starting Struts2, InfoQ, 2006, 122 p. (ISBN 978-1-4303-2033-3, lire en ligne)

## Voir aussi

* Mots réservés jQuery