1 

Display Tag

 I.Introduction

Cet article a pour but de vous présenter la TagLib J2EE appelée DisplayTags.Dans un premier temps, vous parcourrez les concepts de base des TagLibs, puis un tutorial vous expliquera comment installer les displayTags et finalement vous apprendrez à utiliser les DisplayTags dans vos JSP.

Cet article s'adresse aux personnes possédant déjà les connaissances de base du développement d'applications web en J2EE. Particulièrement les notions de WebApp, Session, Requête et Réponse.

Un des problèmes rencontrés lors de la génération de code html à l'aide de serveur d'applications est la qualité du rendu graphique qui en résulte. En effet, le html ne gère que des éléments rectangulaires et plus particulièrement des tables. Dans de nombreuses applications, on cherche à afficher dans une table html une collection d'objets.

En J2EE, les displayTags offrent une solution rapide, pratique et efficace à ce problème. Cette taglib offre un mécanisme d'itération sur une collection très simple, celui-ci s'exécute directement depuis le code d'une jsp. Le résultat donne l'affichage d'un tableau en html avec une quantité d'option telles que les tris sur les colonnes, le groupement des données ou encore l'export du tableau sur un fichier.

 II.Qu'est ce qu'une taglib ?

Comme vous le savez, une JSP est une page de code qui peut contenir du html et du code Java servant à générer celui-ci. Malgré la puissance offerte par le langage Java, on se retrouve souvent à faire exactement la même chose au sein d'une page JSP (boucles, tests, récupération d'objets en Session, ?). Afin de faciliter le travail des développeurs, le langage J2EE offre un mécanisme permettant d'effectuer ces taches répétitives à l'aide de nouvelles balises. Ce mécanisme qui définit le fonctionnement des nouvelles balises s'appelle TagLib.

Une taglib est composé d'au moins deux fichiers. Le premier est un fichier .jar qui contient l'ensemble des classes Java servant à effectuer les traitements sur les données.
Ces traitements sont assez abstraits pour pouvoir s'appliquer à tous les types d'objet. Le deuxième type de fichier le .tld (TagLib Descriptor) décrit la syntaxe, le nom et les options disponibles pour les nouvelles balises. Ces balises peuvent alors être utilisées dans n'importe quel WebApp qui importe les deux fichiers. Les fichiers .tld sont des fichiers xml, ceux-ci respectent une dtd disponibles sur l'url suivantes :

http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd

Ce fichier dtd comprend le type de structure que le fichier xml doit respecter pour être valide.

Exemples :

 1. Tags permettant d'itérer une collection et de récupérer les propriétés d'un objet de celle-ci :

2. Tag permettant d'afficher une propriété d'un Objet :

L'utilisation de TagLib est donc très fréquente dans le développement d'applications Web en J2EE.
Les TagLib permettent ainsi de minimiser les développements en html et de faciliter les accès aux données présentes en Session ou dans la requête.

III. Installation des DisplayTags

En tant que TagLib, l'installation des DisplayTags est très simple. Elle nécessite néanmoins la connaissance de l'architecture d'une WebApp J2EE.
La première chose à faire est bien sûr de télécharger les DisplayTags. Vous pourrez les trouver librement à l'url suivante :

http://displaytag.sourceforge.net/

Ensuite, il suffit en fait de copier les deux fichiers (le .jar et le .tld) dans deux emplacements spécifiques.
On place le fichier de description (.tld) dans le répertoire %WebAppRoot%/WEB-INF
Le .jar quand à lui est placé dans le répertoire %WebAppRoot%/WEB-INF/lib

Pour pouvoir utiliser la TagLib DisplayTag, il suffit de faire l'import suivant dans la page jsp :

 IV. Exemples d'utilisations :

Vous allez ici pouvoir comprendre comment utiliser les displaysTags dans votre code et quel en sera le rendu graphique.

1. Un exemple Simple

Dans un premier temps, voici un exemple simple de création de table :

Ici, on va chercher la collection appelée test et pour chaque objet qu'elle contient, on va afficher les propriétés id, name, email, status et description. On voit que l'on peut également modifier l'entête d'une colonne à l'aide de l'attribut title.

Voici le rendu sur la page html :

Les displaytags offre un autre mécanisme appelé Decorator. Il s'agit en fait de classe héritant de la classe TableDecorator.
Dans ces classes on définit des méthodes qui seront appelée lors de la génération des tables.
Un mapping sera automatiquement effectué entre les attributs property des tags column ces méthodes.
On peut ainsi facilement modifier le rendu de l'affichage d'une colonne par exemple lorsque l'on veut afficher des monnaies ou des dates ou encore si l'on veut générer dynamiquement des liens html.

Voici un exemple de classe Decorator :

 

2. Utilisation des Decorators

On utilise un Decorator dans les displayTags à l'aide du code suivant :

Voici un exemple de rendu sur la page html :

Ces deux exemples sont assez simple tant dans leur utilisation que dans leur rendu.
On peut également obtenir un résultat très complet en combinant différentes options.

3. Un exemple complet

Voici un exemple de code assez complet :

Et en voici le rendu graphique :

Cet exemple est très complet, on constate que l'on peut effectuer des tris sur les deux premières colonnes.
On affiche que les 8 premiers résultats et les DisplayTags fournissent automatiquement un mécanisme pour lister les pages et passer de l'une à l'autre.
On peut également facilement faire des exports à l'aide de l'onglet du bas et ce vers trois type de fichier (Excel, CSV et XML).

 V. Liste des options d'utilisation

Il existe une quantité d'options que l'on peut assigner aux tags des DisplayTags. On peut répartir ces options en deux parties.

 a) Celles qui concernent le tag <display : table> et donc qui s'applique à l'ensemble de la table.

 b) Celles qui concernent le tag <display : column> et qui donc ne concerne qu'une seule colonne.

a) Options à appliquer à l'objet table :

Name

Description

Type

class

Idem Attribut html

String

decorator

Référence à une classe TableDecorator. Celle-ci doit étendre la classe org.displaytag.decorator.TableDecorator. On utilise les TableDecorator pour effectuer des operations sur les listes telles qu'une somme ou le formatage d'une date.

String

defaultorder

Le sens du tri par défaut pour une colonne. Valeurs autorisées : "ascending" (défaut) ou "descending"

String

defaultsort

L'index de la colonne utilise pour le tri par défaut commence à 1.

int

export

Active ou désactive l'export. Valeurs autorisées : true ou false

boolean

id

Une variable implicite de ce nom sera créée et disponible de puis la page et donc la table.

String

length

Nombre de ligne à afficher

String

name

Référence à l'objet utilise comme source pour la table. Souvent une collection placée en session ou dans la requête.

String

pagesize

Nombre d'enregistrement dans la page.

String

requestURI

Lors de la création de lien pour les tris, les exports ou les regroupements, les valeurs générées par ces fonctions sont rajoutée à l'attribut requestURI.

String

sort

Attribut définissant le scope des tris. On utilise 'page' pour ne trier que les occurrences affichées ou 'list' pour trier toute la liste.

String

Style

Idem Attribut html

String

b) Options à appliquer à chaque colonne :

Name

Description

Type

autolink

Création automatique d'un lien vers l'url ou l'adresse e-mail contenu dans la colonne. Par défaut, false.

boolean

class

Idem Attribut html

String

decorator

Référence à une classe TableDecorator. Celle-ci doit étendre la classe org.displaytag.decorator.TableDecorator. On utilise les TableDecorator pour effectuer des operations sur les listes telles qu'une somme ou le formatage d'une date.

String

group

Indice définissant les colonnes à groupée. On groupe une colonne pour ne pas répéter les valeurs identiques. Chaque colonne à grouper doit avoir un indice. Celui-ci commence à 1, il définit l'ordre dans lequel le groupement s'effectuera.

String

headerClass

Attribut html class que l'on appliquera aux entêtes des colonnes.

String

href

Fournis la base de l'URL lorsque l'on veut générer dynamiquement un lien. Pour personaliser celui-ci en function de la ligne, on utilise les tags param*. Ceux-ci permettent de rajouter un paramètre à l'URL.

String

maxLength

Définit la longueur maximum du contenu d'une colonne. Un événement mouseover() est généré de manière à retourner sous forme de tooltip le contenu complet de la colonne.

String

nulls

Par défaut, les valeurs null ne sont pa affichées dans la colonne. Mettre cette valeur à true permet de les afficher. Cette option est souvent utilisée pour le déboguage.

boolean

paramId

Nom du paramètre que l'on utilisera pour la création d'url dynamiques. On peut en spécifier plusieurs tant qu'on lui attribute à chaque fois une valuer.

String

paramName

Nom du bean JSP contenant une String et servant de valeur pour le paramètre spécifié par paramId lors de la creation d'URL dynamique. On peut aussi appelé un attribut en spécifiant la valeur à retourné à l'aide de l'opérateur « . »

String

property

Nom de la propriété du bean surlequel on itère servant à afficher les valeurs dans les colonnes.

String

sortable

Variable booléenne spécifiant si on peut trier la colonne.

boolean

style

Idem Attribut html .

String

title

Titre de la colonne (texte de la cellule TH).

String

 VI. Conclusion :

Les DisplayTags offrent un mécanisme extrêmement simple à mettre en place et d'une grande puissance.
Ils permettent d'éviter de devoir développer des fonctionnalités souvent recherchées telles que le tri de colonne dans une table html.
Ils permettent également de personnaliser l'affichage des données à l'aide des Decorator pour les liens, les dates ou encore les monnaies.
Toutes ces options les rendent indispensable à toute application web développée en J2EE.
Ils ont d'ailleurs été repris dans de nombreux framework open source tel que Spring ou AppFuse.


1 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Evènements
Java Sun Net Talk LIVE CHAT le 2 Avril à 16h303/29/08
SolarisSunDécouvrez les nouveaux Sun Fire sous Intel10/11/07
JavaValtech Days10/9/07
JavaApacheCon du 1 au 4 mai à Amsterdam2/13/07

Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Actualités
SunProjet Kenai: une nouvelle forge open source10/3/08
SunSun Microsystems en forme !8/4/08
SunOpenDS un ldap 100% java7/24/08
SunSun et Fujitsu annoncent un nouveau Sparc647/16/08
SunVisualVM, un outil de surveillance des applications Java7/10/08

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée