Vous êtes sur la page 1sur 118

JBoss Seam3 - Support de cours

Version 2.0

Smile 48 rue de Villiers 92300 Levallois-Perret www.smile.fr

Suivi des versions


Version 1.0 2.0 Date 28/05/2011 27/06/2011 Auteur Patrick Guillerm Gwenael Bonhommeau Commentaires Initialisation du document Relecture et corrections

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

Sommaire

Sommaire

Introduction

1
2 2 3

1 Quest-ce que Seam 1.1 1.2 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pourquoi choisir Seam ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

II

Architecture et build process

5
6 6 7 8 9 10 11 11 14 14 16 16 17 17 20 21

2 Les technologies intgres ` Seam e e a 2.1 2.2 2.3 2.4 JEE 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EJB 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JPA 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . JSF 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 2.4.2 2.4.3 2.4.4 2.5 Page Description Language : Projet Facelets JSF 2 cot java e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Les composant composite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Richfaces 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Le build process 3.1 3.2 3.3 3.4 3.5 EAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ANT + Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Get Start : Smile Seam Forge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure dun projet Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les modules maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

ii

Sommaire

3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 3.6

smile-seam : le module parent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-features : code sources de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-commons : la base de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-datamodel : Les entits JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e smile-seam-core : Le coeur de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-bootstrap : initialiser son application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-war : le rendu de lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smile-seam-ear : lEAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22 22 28 29 30 32 33 36 42 42 43 43

Les scripts ant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 3.6.2 3.6.3 Build smile-seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Build bootstrap, commons, core et datamodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Build war . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

III

Seam : Le coeur

44
45 45 46 46 48 49 53

4 EJB 3.1 4.1 Les composants Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 4.1.2 4.1.3 4.1.4 Rfrencer les composants Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ee Donner un nom ` ses composants Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a Les scopes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Linjection de dpendance : JSR-299 CDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e

5 La persistance des donnes : JPA 2.0 e

IV

Templating JSF

54
56 61 61 61 61

6 Mon premier Template JSF 7 Les principaux composants JSF 7.1 Les composants JSF core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1 7.1.2 f :actionListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

iii

Sommaire

7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9

f :convertDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :convertNumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :facet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :loadBundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :param . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f :selectItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62 62 63 64 64 65 65 66 67 67 68 68 68 70 70 71 72 73 75 76 77 78 79 80 81 85 86 86 87 88 89

7.1.10 f :selectItems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.11 f :subview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.12 f :validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.13 f :valueChangeListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.14 f :verbatim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.15 f :view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Les composants JSF html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.2.6 7.2.7 7.2.8 7.2.9 h :column . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :commandButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :commandLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :dataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :graphicImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :inputHidden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :inputSecret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h :inputText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.2.10 h :inputTextarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.11 h :messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.12 h :message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.2.13 h :outputFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.14 h :outputLabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.15 h :outputLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.16 h :outputText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.17 h :panelGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

iv

Sommaire

7.2.18 h :panelGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.19 h :selectBooleanCheckbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.20 h :selectManyCheckbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.21 h :selectManyListbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.22 h :selectOneListbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.23 h :selectManyMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.24 h :selectOneMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

91 92 93 95 96 96 97 97 99 99 99

7.2.25 h :selectOneRadio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Les composants JSF facelets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 7.3.7 7.3.8 7.3.9 ui :component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ui :composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ui :debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 ui :decorate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 ui :insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

ui :dene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 ui :fragment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 ui :include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 ui :param . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

7.3.10 ui :remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.3.11 ui :repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 7.4 Biblioth`ques de composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 e 7.4.1 7.4.2 7.4.3 7.4.4 Richfaces & AjaxForJSF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Primefaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 ICEfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Myfaces & Tomahawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Les formulaires

109

VI

Composants JSF

110

VII

Optimisations

111

VIII

Tests Unitaires
S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

112

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

Web

www.smile.fr

Premi`re partie e

Introduction

Quest-ce que Seam

1
1.1

Quest-ce que Seam


Historique

Le framework JBoss Seam est un framework Open Source ` l initiative de Gavin King 1 . A l origine, le but de Seam tait a e de permettre l implmentation dapplications web stateful ` partir de JSF 1.2 2 et des EJB 3, tout en simpliant lintgration e a e du framework Hibernate 3 .JEE5 et surtout JSF 1.2, ne permettent pas de couvrir tous les besoins techniques dune application web. JSF 1.2 avait beaucoup de lacune pour un dveloppement simple et productif (probl`me avec le rafra e e chissement des EJB, intgration HTML complexe, etc. . .). A la mani`re de Spring, les backing bean de JSF 1.2 ncessitaient dtre dclar dans e e e e e e le faces-cong.xml 4 .Seam propose une extension de JEE5 avec des concepts novateurs et lintgration dautres frameworks e Open Source (JBPM, ITEXT, Richfaces, Ajax For JSF, et bien dautres). Quelques chires cls : e Juin 2006 : Sortie de la version 1.0 de Seam Fin 2007 : Version 2.0 de Seam Avril 2011 : Derni`re version de Seam 2.x (2.2.2.nal) e 31 mars 2011 : Sortie de la version 3.0.0.nal de Seam Apr`s 5 ans de dveloppement dvolution Seam est arriv ` la version 3. Cette version soriente davantage vers la simplicae e e ea tion et lunication des direntes couches applicatives. JBoss Seam a t lun des acteurs principaux dans la conception de e ee la norme JEE 6 (principalement sur la norme dinjection de dpendances CDI 5 et le projet JSF2/Facelets ). JEE 6 soriente e davantage vers la convention, en limitant la conguration XML.

Figure 1.1 Timeline reprsentant les sortis de Seam et ces principales concurrents. e

1. 2. 3. 4. 5.

Gavin King est le fondateur dHibernate Java Server Faces :framework de Hibernate est un framework permettant la persistance dobjets en base de donnes e le faces-cong.xml est le chier de conguration principal de JSF CDI : Contexts and Dependency Inject, consiste ` crer dynamiquement (injecter) les dpendances entre les direntes classes a e e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

2/??

Quest-ce que Seam

1.2

Pourquoi choisir Seam ?

Beaucoup de dveloppeurs reprochent ` Seam dintgrer dirents frameworks ainsi que la complexit de JSF (balises e a e e e spciques). Cependant dans la majorit des cas on retrouve les mmes briques applicatives (hibernate, Spring, jsp ou du e e e velocity). Ce point est donc un faux probl`me, Seam suvre ` unier les dirents framework qui le compose pour avoir e a e une conguration simple. On entend souvent que JSF ncessite lapprentissage des tags libs spciques. Il est vrai quil faut se familiariser avec les e e dirents tags lib (JSF, Facelets, Richfaces, PrimeFaces, compatibilit avec la JSTL, etc. . .). Cette connaissance se fait au fur e e et ` mesure de lutilisation de JSF. Les dirents sites dcrivant les tags libs sont tr`s bien documents. Une fois les principes a e e e e de bases acquis, il est tr`s simple dutiliser de nouveaux composants. La norme HTML 5 ncessite galement lapprentissage e e e de nouveaux tags sans que cela ne choque. Les dbuts de JSF ont t un peu laborieux, beaucoup de dveloppeurs se sont tourns vers Spring, de mme avec les EJB e ee e e e qui dans leurs version 2 ont laiss de mauvais souvenirs. Tout le travail de JBoss a t de couper court ` toutes ces fausses e ee a ides. La norme JEE 6 est laboutissement du travail de simplication et de normalisation de Seam. e Le choix dune technologie en java est toujours compliqu et aucun framework nest parfait. Seam sadresse principalement e aux applications avec beaucoup de formulaires ( comme le backoce de lACFCI 6 grant les dclarations dentreprises). La e e cration et la validation des formulaires est un point fort de Seam, surtout grce ` la validation par annotations (JSR-303) et e a a la transparence entre la vue et le contrleur. Lajax y est galement considrablement simpli. Seam comporte un framework o e e e Ajax (Ajax for JSF) permettant de grer le rafra e chissement de certaines parties de la page web sans crire la moindre ligne e de javaScript. Seam permet galement une trs grandes souplesse dans les volutions du codes. Cela est principalement d aux EJB 3 et e e e u ` JPA 7 qui permettent un dveloppement en annotations avec un minimum de congurations XML. Le refactoring en est a e donc simpli. e Dans un abus de langage on parle de framework lgs pour Spring et Struts en opposition aux frameworks JEE telle que e e Seam. Cependant cette lgerte nest pas rellement lis ` loccupation mmoire de lapplication mais au fait de lutilisation e e e e a e dun conteneur de servlets (tomcat ou jetty) au lieu dun serveur dapplication (conteneur de servlet + conteneur EJB). Seam peut tr`s bien fonctionner sur un tomcat, ` condition dembarquer les lib javax grant les EJB. e a e Lappellation framework lg dsigne aussi le fait que les beans ne sont pas obligs davoir une interface pour fonctionner. e e e e Jusqu` Seam 3 cela ntait pas le cas, les EJB 3.0 avaient besoin dune interface. Bien souvent les contrleurs nont quune a e o seule implmentation. De ce constat ` fait voluer les EJB vers les EJB 3.1 . Les interfaces ne sont plus obligatoires, et e a e doivent tre utilises uniquement sil y a plusieurs implmentations direntes (Mock, Runtime, etc. . .). e e e e A noter que cela permet dviter la mauvaise pratique dajouter Impl ` la n du nom des implmentations. e a e
6. LAssemble des Chambres Franaises de Commerce et dIndustrie, le backoce grant les dclarations dentreprises a t ralis avec Seam e c e e e e e e 2.x 7. Java Persistence API

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

3/??

Quest-ce que Seam

Beaucoup de dveloppeurs se demandent si un framework JEE tel que Seam avec un frontal en JSF est plus consommateur e en ressource quun framework lg comme Spring MVC avec du velocity. Cela dpend normment de la faon dont le e e e e e c code est implment. En thorie Spring MVC sera un peu moins consommateur dans les cas de rendu sans formulaire ni e e e dajax. Les formulaires et lajax sont deux points critiques souvent implments de faon hasardeuse et dont les performances e e c de lapplication sen ressentent (utilisation massive de JQuery, mauvaise connaissance du templeting, pas de mcanique de e layout performant). JSF a un fonctionnement tr`s dirent au niveau de son rendu que les frameworks tels que velocity ou free marker. JSF e e gn`re un arbre de composants. Velocity et free marker sont procdurales. Leurs rendu est donc plus rapide que JSF (hors e e e optimisation de sa conguration). JSF permet tout un tas de conguration an doptimiser ses performances. Comme pour toutes les briques quint`gre Seam, JBoss propose son lot de solution pour amliorer les performances, comme le Seam Cache e e qui permet de mettre des fragments HTML en cache avec une grande facilit. e Sur le projet de lintranet de Generali on a pu comparer JSF et free marker. La base de Nuxeo est conu avec Seam, c mme si Nuxeo nest pas le meilleur exemple dans lutilisation de ce framework. Le backoce est en JSF et le frontal en free e marker. Le poids dune session dun cot ou de lautre de lapplication sont ` peu pr`s identique. e a e La question est plutt est-ce que le re-calcul de lensemble des donnes contenu dans une page co te moins ch`re en temps o e u e de calcul quun arbre de composants JSF. On peut donc rsumer par : e + : Seam permet une unication entre toutes les briques applicatives. + : Une excellente gestion de formulaire + : De lAjax sans la contrainte dcrire du code JavaScript e + : Peut de conguration grce aux annotations a + : Mcanique de templating et layout tr`s perfectionnes 8 . e e e + : Evolution et refactoring plus simple. + : Une tr`s grande productivit e e + : Un framework orient composant, on peut donc plus facilement rutiliser du code dans dautres applications. e e - : Peu de dveloppeur connaissant ce framework en France. e - : Encore beaucoup trop de dveloppeurs attachs aux chiers XML. e e - : Seam est quand mme conu pour fonctionner sur un serveur dapplication. e c - : Le calcul dune page JSF prend un peu plus de temps. - : La conguration du build process est un peu plus dlicat, en obligeant de navoir aucun jar 9 dans le war 10 (tous les jar e doivent se trouver au niveau de lEAR 11 ). +/- : Il y a une forte liaison entre les pages JSF et les contrleurs. Les appels aux contrleurs se font via leur nom de o o ressources JNDI dans les pages JSF. Lorsque lon renomme une classe il faut penser ` vrier ses appels dans les a e templates. Ce point constitue un point fort lors du dveloppement, rendant transparente la liaison entre le template et e son contrleur, mais est problmatique lors des refactoring. o e
8. Le templating facelets permet la cration dun layout principal, avec un mcanisme dhritage entre layout pour implmenter uniquement e e e e la partie ncessaire dans la page e 9. Java ARchive : chier zip contenant les sources Java 10. Web ARchive : chier zip contenant les source dune application web Java 11. Enterprise Application ARchive

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

4/??

Deuxi`me partie e

Architecture et build process

Les technologies intgres a Seam e e `

2
2.1

Les technologies intgres ` Seam e e a


JEE 6

Java Entreprise Edition 6 est un ensemble de normes qui servent ` dnir une faon standard de dvelopper des a e c e application ` destination des entreprises. En r`gle gnrale les versions Entreprise dcoulent de la version JDK de java. On a e e e e retrouve donc les volutions du JDK avec des spcications et des Api supplmentaires (toutes les API commenants par e e e c javax.* ). Pour nen citer que quelques une, on retrouve : JSR 303 : Bean Validation, la validation par annotation, issus du projet Hibernate Validator. Ce projet tait e dj` intgr dans Seam 2.x, il se retrouve tout naturellement dans la version 3. Seam et Richfaces apportent des ea e e amliorations pour une plus grande facilit dintgration 1 . e e e JSR 224 : Java API for XML-Based Web Services, bas sur lAPI JAX-WS 2.2 permettant lutilisation des WEB e services. JAX-WS se base sur des annotations an de congurer les Web Services. De mme pour le mapping des e objets changs est ralis via JAXB, galement en annotations. JAX-WS et JAXB permettent galement la mise en e e e e e e place de testes unitaire plus simplement compars ` dancien framework comme XFire. e a JSR 311 : Java API for RESTful Web Services (JAX-RS), permettant le dveloppement dapplication RESTful. e Cest un point que beaucoup de dveloppeurs reprochaient au JEE, mme si il tait tout a fait possible dimplmenter e e e e des services RESTful en Seam 2.x 2 . JSR 314 : JSF2 est devenu limplmentation de rfrence de JEE 6. La norme a prit galement en compte les e ee e derni`res volutions (projet Facelets, intgr dans Seam 2.x). JSF 2 a beaucoup volu au niveau de limplmentation e e e e e e e des composants Composites, qui nont plus besoin dtre dnit dans un chier XML. Ils sont dnit directement par e e e convention de package. JSR 317 : Java Persistence 2.0, issus du projet JPA ` linitiative de Gavin King, la version 2 de JPA apporte son lot a dvolutions comme avec les criterias, ou lutilisation de script EL pour lier directement des requetes HQL avec des EJB. e JSR 299 : Contexts and Dependency Injection for Java (Web Beans 1.0). Cest la principale volution de JEE 6, e la normalisation de linjection de dpendance par annotations. Cest le point qui a fait le plus dbat entre JBoss et e e Spring Source. Cette norme reprend limplmentation de Seam avec les conventions de nommage de Spring. Seam 3 e tant conu pour prendre en charge les annotations de Seam 2. e c Pour plus de dtails sur la norme JEE6 et les JSR qui en sont lies, je vous invite ` visiter le site doracle : e e a http://www.oracle.com/technetwork/java/javaee/tech/index.html
1. La JSR-303 ne ncessite plus de dcorateur JSF, un composant spcique de Richfaces est utilis pour cela e e e e 2. le chier pages.xml permet de lier les urls avec les contrleurs, les param`tres HTTP peuvent tre inject dans les attributs du contrleur o e e e o

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

6/??

Les technologies intgres a Seam e e `

2.2

EJB 3.1

Issus de la JSR 318, les EJB sont llments incontournable du monde JEE. Pour les dveloppeurs ayant subit les EJB ee e 2.x il faut oublier cette erreur du pass. Les EJB 3 sont de simple Pojo 3 avec des annotations. e Les EJB 3 sont des ressources JNDI 4 , ils poss`dent donc un nom unique qui est utilis pour linjection de dpendance et e e e dans les templates JSF. Si deux EJB ont le mme nom votre serveur dapplication vous le fera remarquer tr`s rapidement ` e e a son dmarrage par une violente exception. e La version 3.1 permet de rendre linterface optionnelle. Dans beaucoup de cas on a quune seule implmentation, par e exemple pour les contrleurs. De mme le nom des EJB na plus besoin dtre prcis, par convention il est le nom de la o e e e e classe dcapitalis. Il reste toutefois possible de prciser le nom des EJB au besoin. e e e Un EJB 3.1 ressemble donc ` : a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package org . jboss . seam . examples . actions import javax . inject . Named ; import javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; @ConversationScoped @Named public class H e l l o T h e W o r l d{ private String foobar = " hello foo bar ! " ;

public String g e t F o o b a r() { return foobar ; } public void s e t F o o b a r( final String foobar ) { this . foobar = foobar ; } }

Ce qui nous permet de rcuprer lattribut foobar directement en JSF via le nom de notre EJB e e
1
< h : o u t p u t T e x t value = " #{ h e l l o T h e W o r l d. foobar } " / >

On peut voir ici que les EJB ne sont plus aussi diabolique quils ont pu ltre par le pass. On verra dans la suite du e e document plus en dtail comment les utiliser. e Pour plus de dtails je vous invite ` visiter le site de Jean-Michel Doudoux e a http://www.jmdoudoux.fr/java/dej/chap-ejb31.htm.

3. Plain Old Java Object, littralement un bon vieil objet Java, est une classe sans interface ni dhritage autre que la classe Object. Cet e e hritage est implicite e 4. Java Naming and Directory Interface

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

7/??

Les technologies intgres a Seam e e `

2.3

JPA 2

JPA 2 apporte son lot de nouveauts, avec des annotations supplmentaires an de mieux grer les collections (@Elemente e e Collection ), les Map (@MapKeyColumn ) et la possibilit de supprimer les entres orphelines pour les liaisons OneToMany e e et OneToOne via le param`tre orphanRemoval. Les liaisions ManyToMany nen prote pas car JPA ne peut dterminer si e e lentre en base na pas encore une liaison. e Mais lune des principales volutions est les criterias qui existaient dj` sur hibernate. Il est tout naturel que Gavin King e ea lai pouss sur JPA 2. e
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 27 28 29
package org . jboss . seam . examples . actions import javax . inject . Named ; import javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; @ConversationScoped @Named public class U s e r F i n d e r { @PersistenceContext private E n t i t y M a n a g e r e n t i t y M a n a g e r;

public User f i n d B y T r i g r a m( String trigram ) { final User user ; C r i t e r i a B u i l d e r criteria = em . g e t C r i t e r i a B u i l d e r() ; CriteriaQuery < User > c r i t e r i a Q u e r y = criteria . c r e a t e Q u e r y( User . class ) ; Root < User > users = c r i t e r i a Q u e r y. from ( User . class ) ; c r i t e r i a Q u e r y. select ( User ) . where ( criteria . equal ( users . < String > get ( " trigram " ) , trigram ) ) ; user = em . c r e a t e Q u e r y( c r i t e r i a Q u e r y) . g e t S i n g l e R e s u l t() ;

return user ; }

Lavantage des criterias est la possibilit de refactorer le code. Cependant cela est au dtriment de la lisibilit du code. e e e Il est toujours possible comme en JPA 1 dutiliser les NamedQuery et le HQL.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

8/??

Les technologies intgres a Seam e e `

Exemple de NamedQuery :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
package org . jboss . seam . examples . entity @Entity @ N a m e d Q u e r y( name = " f i n d A l l U s e r s" , query = " SELECT u FROM User u " ) public class User { @Id @GeneratedValue private Long id ; @NotNull private String @NotNull private String

name ;

f i r s t n a m e;

@NotNull @Column ( length = 3) private String trigram ;

// c o ns t r u c t o r s / g e t t e r s & s e t t e r s . . . .

package org . jboss . seam . examples . actions import javax . inject . Named ; import javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; @ConversationScoped @Named public class U s e r F i n d e r { @PersistenceContext private E n t i t y M a n a g e r e n t i t y M a n a g e r;

public List < User > f i n d A l l U s e r s() { return em . c r e a t e N a m e d Q u e r y( " f i n d A l l U s e r s" ) . g e t R e s u l t L i s t() ; } }

2.4

JSF 2

JSF 2 est la principale volution de Seam 3, beaucoup des concepts dj` intgrs ` Seam 2.x se retrouvent dans JSF 2. e ea e e a Le projet Faclets est nativement intgr ` JSF. e ea

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

9/??

Les technologies intgres a Seam e e `

2.4.1

Page Description Language : Projet Facelets

Pour rappel Facelets est un ensemble de composants JSF ainsi que la possibilit de crer des layouts pour faciliter e e lintgration de page JSF. e Exemple de layout Facelets :
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
<! DOCTYPE html PUBLIC " -// W3C // DTD XHTML 1.0 T r a n s i t i o n a l// EN " " http: // www . w3 . org / TR / xhtml1 / DTD / xhtml1 - t r a n s i t i o n a l. dtd " > < f:view xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:ui = " http: // java . sun . com / jsf / facelets " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:a = " http: // r i c h f a c e s. org / a4j " c o n t e n t T y p e= " text / html " id = " #{ messages [ project . id ]} " > < html > < u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = HEAD = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = </ u i : r e m o v e> < head > < meta http - equiv = " Content - Type " content = " text / html ; charset = UTF -8 " / > < title > #{ messages [ project . name ]} </ title > < a : l o a d S t y l e src = " / s t y l e s h e e t/ theme . css " / > < u i : i n s e r t name = " head " / > </ head > < u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = BODY = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = </ u i : r e m o v e> < body > < div id = " body " class = " body " > < f : s u b v i e w id = " e r r o r M e s s a g e s" rendered = " #{ s h o w G l o b a l M e s s a g e s} " > < div id = " error " > < h : m e s s a g e s id = " messages " g l o b a l O n l y= " true " s t y l e C l a s s= " message " e r r o r C l a s s= " errormsg " i n f o C l a s s= " infomsg " w a r n C l a s s= " warnmsg " / > </ div > </ f : s u b v i e w> < div id = " b o d y C o n t e n t" > < u i : i n s e r t name = " body " / > </ div > </ div > </ body > </ html > </ f:view >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

10/??

Les technologies intgres a Seam e e `

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

< ui:composition xmlns:ui = " http: // java . sun . com / jsf / facelets " template = " layout / template . xhtml " > < u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = HEAD ============ == = == == == == == == == = == == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > < u i : d e f i n e name = " body " > < script type = " text / j a v a s c r i p t" src = " #{ f a c e s C o n t e x t. e x t e r n a l C o n t e x t. r e q u e s t C o n t e x t P a t h}/ js / tools . js " > </ script > </ u i : d e f i n e>

< u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = BODY CONTENT ============ == = == == == == == == == = == == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > </ u i : r e m o v e> < u i : d e f i n e name = " body " > < h1 > Hello the world < / h1 > </ u i : d e f i n e> </ u i : c o m p o s i t i o n>

Ce que lon remarque sur cet exemple, cest que le premier chier template dnit la structure globale de la page, avec e les enttes, bloc de messages derreurs, etc.. Le composant ui :insert dnit les zones qui seront implmentes par les pages e e e e JSF hritants du template. e Le second chier ne dnit que les zones prvues par le template via le composant ui :dene. Toutes modications du e e layout principal seront impactes sur toutes les pages lutilisant. Un layout peut galement hriter dun autre layout, laissant e e e ` la page JSF uniquement la zone rellement ncessaire ` implmenter. a e e a e

2.4.2

JSF 2 cot java e

Du cot java JSF 2 apporte quelques modications, avec un lot dannotations an dviter la conguration XML qui e e tait inhrent en JSF 1.2. e e On retrouve donc : @ManagedBean : Permettant de dnir un backing bean. e @SessionScoped : Pour les beans de scope Session @RequestScoped : Pour les beans de scope Request @ViewScoped : Pour les beans de scope vue. Le scope vue correspond ` tous les appelles fait sur une mme page a e par un utilisateur. Ces dirent scopes taient dj` prsentes en Seam 2.x, JSF 2 reprend uniquement les bonnes ides dj` mises en pratique e e ea e e ea par le pass. e

2.4.3

Les composant composite

Lautre point important de JSF 2 est la possibilit de crer des composants composites 5 sans que lon ai besoin de les e e dnir en XML. Les structures de ces composants voluent galement. Leurs structures sont ` prsent dcoupes en deux e e e a e e e parties, la premi`re en dbut de template XHTML correspond ` linterface du composant, regroupant la documentation ainsi e e a que les spcications. La seconde correspond ` son implmentation. e a e
5. Les composants composites sont des composants JSF construits ` base de fragment XHTML a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

11/??

Les technologies intgres a Seam e e `

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 27 28 29 30 31 32 33 34

< ui:composition xmlns:ui = " http: // java . sun . com / jsf / facelets " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:cc = " http: // java . sun . com / jsf / c o m p o s i t e" xmlns:f = " http: // java . sun . com / jsf / core " > < u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = INTERFACE ============ == = == == == == == == == = == == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > < c c : i n t e r f a c e> < c c : a t t r i b u t e name = " id " required = " true " / > < c c : a t t r i b u t e name = " title " required = " true " / > </ c c : i n t e r f a c e>

< u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = IMPLEMENTATION ============ == = == == == == == == == = == == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > </ u i : r e m o v e> < c c : i m p l e m e n t a t i o n> < div id = " #{ cc . attrs . id } " class = " panel " > < div id = " #{ cc . attrs . id } _title " > < span id = " #{ cc . attrs . id } _ t i t l e _ l a b e l" > #{ cc . attrs . title } < span > </ div > </ div >

< div id = " #{ cc . attrs . id } _content " class = " p a n e l _ c o n t e n t" > < u i : i n s e r t/ > </ div > </ c c : i m p l e m e n t a t i o n> </ u i : c o m p o s i t i o n>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

12/??

Les technologies intgres a Seam e e `

Ce qui nous fait quune fois notre composant enregistr dans le dossier /resources sous le nom panel.xhtml e (/resources/project/panel.xhtml) on pourra lutiliser de la sorte :
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 27 28 29 30 31 32 33
< ui:composition xmlns:ui = " http: // java . sun . com / jsf / facelets " x m l n s : p r o j e c t= " http: // java . sun . com / jsf / c o m p o s i t e/ project " template = " layout / template . xhtml " > < u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = HEAD ============ == = == == == == == == == = == == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > < u i : d e f i n e name = " body " > < script type = " text / j a v a s c r i p t" src = " #{ f a c e s C o n t e x t. e x t e r n a l C o n t e x t. r e q u e s t C o n t e x t P a t h}/ js / tools . js " > </ script > </ u i : d e f i n e>

< u i : r e m o v e> <! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = BODY CONTENT ============ == = == == == == == == == = == == = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > </ u i : r e m o v e> < u i : d e f i n e name = " body " > < h1 > Hello the world < / h1 >

< p r o j e c t : p a n e l id = " myPanel " title = " Hello my JSF c o m p o n e n t" > <p > This content will be include in my custom c o m p o n e n t. </ p > </ p r o j e c t : p a n e l> </ u i : d e f i n e> </ u i : c o m p o s i t i o n>

A noter que notre composant commence sa dclaration par un ui :composition, cela permet dutiliser la balise e ui :insert qui servira ` dire ` JSF o` il doit ajouter les composants enfants. a a u On remarque galement que la dclaration de la taglib reprend le nom du dossier dans lequel on a enregistr notre chier e e e XHTML (xmlns :project=http ://java.sun.com/jsf/composite/project). JSF 2 se base sur de la convention an dviter la e conguration XML, il sait que lorsquil rencontre une taglib dbutant par http ://java.sun.com/jsf/composite/ il doit e rcuprer les composants se situant dans /resources . e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

13/??

Les technologies intgres a Seam e e `

2.4.4

Les ressources

La gestion des ressources (images, fragment XHTML, script javascript, etc. . .) a considrablement volu. Il nest plus e e e ncessaire que les ressources soient places dans le WAR (/EAR/WAR/webapp/). Elle peuvent tre ajoutes directement e e e e dans un jar, soit dans /resources soit dans /META-INF/resources . Cela a lnorme avantage de versionner nos ressources, e et surtout davoir une conception plus modulaire. Avant il tait dicile davoir une approche par modules des direntes ressources, ` moins de faire du war overlay via e e a maven ou dutiliser des points dextension OSGI . Les points dextension OSGI taient une mthode bien plus able quune e e conguration complexe de maven. Cependant dans les deux cas, cela ncessitaient beaucoup de conguration XML. Les e ressources devant des ressources JNDI il est plus simple de laisser le class loader se charger de leurs rfrencements. ee La cration de briques composants rutilisables sen retrouve davantage simplie. e e e

2.5

Richfaces 4

Richfaces est une biblioth`que de composants JSF. On y trouve des composants tels que : e rich :tabPanel : permettant davoir des onglets ` lintrieur de sa page a e rich :tree : qui gn`re une arborescence, le genre de composant bien utile pour des GED, larborescence de Nuxeo est e e gre par ce composant. e e rich :calendar : pour avoir un calendrier (enn intgr dans Nuxeo ` la place du composant tomahawk) e e a rich :autocomplete : permettant davoir un champ avec de lauto-compltion. e

Pour plus dinformation sur les composants RichFaces le site de dmo est bien conu : e c http: // richfaces-showcase. appspot. com/ richfaces/ component-sample. jsf Richface4 a t enti`rement rcrit en JSF 2, cela a permit une amlioration de ses performances. Le framework JavaScript ee e ee e interne a t remplac par JQuery (dans les versions antrieure cest Prototype qui tait utilis). ee e e e e Le point le plus intressant dans la nouvelle version de RichFaces est le rich :validator qui simplie lintgration de la e e JSR-303 6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<! DOCTYPE html PUBLIC " -// W3C // DTD XHTML 1.0 T r a n s i t i o n a l// EN " " http: // www . w3 . org / TR / xhtml1 / DTD / xhtml1 - t r a n s i t i o n a l. dtd "> < u i : c o m p o s i t i o n xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:ui = " http: // java . sun . com / jsf / facelets " x m l n s : a 4 j= " http: // r i c h f a c e s. org / a4j " x m l n s : r i c h= " http: // r i c h f a c e s. org / rich " > < h:form > < r i c h : p a n e l> < f:facet name = " header " > < h : p a n e l G r o u p> < h : o u t p u t T e x t value = " User i n f o r m a t i o n" / > </ h : p a n e l G r o u p> </ f:facet > < h : p a n e l G r i d columns = " 3 " > <! + + + + + + + + + + + + + + + + name + + + + + + + + + + + + + + + + > < h : o u t p u t T e x t value = " Name: " / >

6. Pour rappel la JSR-303 est la norme dcrivant la validation par annotations. e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

14/??

Les technologies intgres a Seam e e `

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 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 27 28 29 30 31 32 33

< h : i n p u t T e x t value = " #{ v a l i d a t i o n B e a n. name } " id = " name " > < rich:validator /> </ h : i n p u t T e x t> < r i c h : m e s s a g e for = " name " / > <! + + + + + + + + + + + + + + + + email + + + + + + + + + + + + + + + + > < h : o u t p u t T e x t value = " Email " / > < h : i n p u t T e x t value = " #{ v a l i d a t i o n B e a n. email } " id = " email " v a l i d a t o r M e s s a g e= " bad email " > < rich:validator /> </ h : i n p u t T e x t> < r i c h : m e s s a g e for = " email " / > <! + + + + + + + + + + + + + + + + age + + + + + + + + + + + + + + + + > < h : o u t p u t T e x t value = " Age " / > < h : i n p u t T e x t value = " #{ v a l i d a t i o n B e a n. age } " id = " age " > < rich:validator /> </ h : i n p u t T e x t> < r i c h : m e s s a g e for = " age " / > <! + + + + + + + + + + + + + + + + agreed + + + + + + + + + + + + + + + + > < h : o u t p u t T e x t value = " I agree the terms " / > < h : s e l e c t B o o l e a n C h e c k b o x value = " #{ v a l i d a t i o n B e a n. agreed } " id = " agreed " > < r i c h : v a l i d a t o r/ > </ h : s e l e c t B o o l e a n C h e c k b o x> < r i c h : m e s s a g e for = " agreed " / > </ h : p a n e l G r i d> </ r i c h : p a n e l> </ h:form > </ u i : c o m p o s i t i o n>

package org . r i c h f a c e s. demo . v a l i d a t i o n; import import import import import import import javax . faces . bean . M a n a g e d B e a n; javax . faces . bean . R e q u e s t S c o p e d; javax . v a l i d a t i o n. c o n s t r a i n t s. A s s e r t T r u e; javax . v a l i d a t i o n. c o n s t r a i n t s. Max ; javax . v a l i d a t i o n. c o n s t r a i n t s. Min ; javax . v a l i d a t i o n. c o n s t r a i n t s. Email ; javax . v a l i d a t i o n. c o n s t r a i n t s. Size ;

@ManagedBean @RequestScoped public class V a l i d a t i o n B e a n { @Size ( min =3 , max =12) private String name = null ; @Email private String email = null ; @Min ( value = 18) @Max ( value = 99) private Integer age ; private String country ; private String jobTitle ; @AssertTrue private boolean agreed = true ; // g e t t e r s & s e t t e r s . . . }

Comme on peut le remarquer les champs contiennent un rich :validator ainsi quun composant rich :message . Le rich :validator permet ` RichFaces deectuer la validation par annotations et le rich :message sert ` acher le message a a derreur. Etant donn que nos composants sont dans h :panelGrid le message derreur sera ach ` cot du champ. e ea e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

15/??

Le build process

3
3.1

Le build process
EAR

les Enterprise Application ARchive sont les packaging conus pour les serveurs dapplications. Ces archives ne sont pas c plus complexes que des WAR classiques que lon retrouve dans tomcat. Une application Seam peut parfaitement tre packag e e en WAR. Cependant, larchitecture EAR permet une meilleur vision de direntes couches prsentes dans une application e e JEE.

Figure 3.1 Reprsentation du packaging EAR e

Comme on peut le voir sur cette illustration lEAR est dcoupe en 3 parties : e e Un dossier lib contenant toutes les JAR de lapplication. Un dossier war (qui peut tre compress dans un chier zip) qui est le war classique que lon retrouve dans des e e applications pour tomcat. Cependant le war dans le packaging EAR ne contient aucun JAR. Cela est extrmement e important lorsque lon dveloppe des composants JSF. e Les EJB sont ` la racine de lEAR. a Comme un WAR, lEAR se place directement dans le dossier deploy du serveur dapplication. Il peut tre compress e e ou non. Dans un environnement de dveloppement lEAR est non compress avec le WAR inclus galement dcompress, e e e e e permettant ainsi de dployer ` chaud les parties de lapplication sur lesquelles on travail. e a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

16/??

Le build process

3.2

ANT + Maven

Lobjectif du build process est donc de produire cet EAR. Pour cela la solution la plus simple et dutiliser Maven pour la compilation et la construction de l EAR, et ANT pour le build process (dploiement, packaging de livraison, etc...) e On peut se demander pourquoi ne pas utiliser Maven pour raliser ces deux tches. La raison est assez simple, la e a compilation et la gestion du build process sont deux tches distinctes. Mlanger les deux am`ne souvent ` tordre Maven a e e a dans tous les sens an de russir ` obtenir le rsultat souhait. De plus, le fait de sparer les deux permet de remplacer plus e a e e e simplement lune des deux parties par une autre solution, par exemple de remplacer maven par Ivy. Il est ` noter que Seam 2.x tait livr avec un outil bas sur IVY an de rsoudre les dpendances. Seam-gen a e e e e e permettait de gnrer un squelette de projet facilement en aidant le dveloppement de nouvelles fonctionnalits. e e e e On trouve sur le net certains archetypes maven pour Seam 3. Cependant ils sont gnralement bien trop simples, et ne e e sont pas aussi aboutis au niveau de leurs congurations que ltait Seam-gen. e JBoss travail actuellement sur une forge an de proposer une solution quivalente ` Seam-gen. Pour plus dinformation e a sur Seam forge je vous invite ` aller sur leur site : http://seamframework.org/Documentation/SeamForge a

3.3

Get Start : Smile Seam Forge

An de permettre la gnration de squelette de projets rapidement, jai ralis un script ANT. Il sera par la suite e e e e converti en archetype Maven. An de bien comprendre comment est architectur Seam un exemple permet davoir une e meilleure vision. La forge se prsente par un dossier contenant un dossier pour les sources (src), ainsi que de chiers Ant (build.xml, e build.properties et ant-contrib).

Figure 3.2 Arborescence de la forge smile Lutilisation de la forge est tr`s simple, il faut tout dabord renseigner les direntes proprits du projet dans le e e ee build.properties

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

17/??

Le build process

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 27 28 29

## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ######################################## # SEAM 3 FORGE PROJECT # = = = = = = = = = == = = = = = = = = = = == # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ######################################## #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== # GLOBAL PROJECT PROPERTIES #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== forge . project . name = smile - seam forge . project . display . name = Smile Seam forge . project . d e s c r i p t i o n= F o r m a t i o n project on Seam 3 #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== # MA E INFO VN #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== forge . project . maven . groupId = fr . smile forge . project . maven . a r t i f a c t I d= seam3 forge . project . maven . version =0.1 - SNAPSHOT forge . project . root . package = fr . smile . seam

#= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== # DEPLOYEMENT INFO #= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ======================================== forge . project . w o r k s p a c e. dir =/ w o r k s p a c e/ projects forge . project . delivery . dir =/ w o r k s p a c e/ projects / delivery forge . project . server . deploy . dir =/ opt / serveurs / jboss -6.0.0. Final / server / default / deploy

forge.project.name : Cest le nom du projet qui sera utilis dans le web.xml pour le nom de lapplication ainsi que e dans les dirents dossiers du projet. e forge.project.display.name : Cest le nom du projet dans le chier messages.properties. Il sert pour lachage du titre des pages web. forge.project.root.package : Cest le package principale de lapplication. On le retrouve dans les direntes classes e dexemples. forge.project.workspace.dir : Cest lune des proprits principales. Cest le dossier dans le quel sera gnr le projet. ee e e e forge.project.server.deploy.dir : Cest lemplacement du serveur. Il sera utilis dans le chier build.xml du projet pour e le dploient. e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

18/??

Le build process

Il faut en suite lancer le script ant :


1 2
cd / path / to / smile / seam / forge ant -f build . xml

Une fois le projet gnr il faut lancer le build process du projet via le script ant se trouvant dans le dossier parent du e e e projet :
1 2
cd / w o r k s p a c e/ projects / smile - seam / ant -f build . xml

Ce script va tout dabord utiliser maven pour rsoudre les dpendances et construire lEAR. Une fois que cela est fait, e e ant rcup`re lEAR pour le copier dans le dossier deploy du serveur. e e Un fois le processus de compilation termin on peut lancer notre serveur dapplication : e
1 2
cd / opt / serveurs / jboss -6.0.0. Final / bin ./ run . sh

Notre application est donc accessible via lurl http://localhost:8080/smile-seam

Figure 3.3 Page daccueil du projet gnr par la forge smile e e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

19/??

Le build process

3.4

Structure dun projet Seam

Notre forge nous a construit un projet type pour Seam, cela permet de comprendre comment il est architectur. e

Figure 3.4 Arborescence du projet gnr par la forge e e e

Le projet est donc divis en plusieurs sous parties : e code-format : Cest lensemble de chiers pour le formatage du code, ainsi que les r`gles PMD et check-style. e A documentations : Ce dossier contient un template L TEX pour la documentation du projet. distribution : Ce sont les chiers qui dpendent de lenvironnement. Typiquement, on y retrouve les chiers e env.properties. features : Cest le coeur du projet, cest dans ce dossier que se trouve le code source de lapplication. Le dossier features est galement dcompos en dirent module Maven : e e e e bootstrap : Le bootstrap est le module qui sera excut au dmarrage du serveur pour linitialisation de lapplication. e e e Par exemple cest lui qui aura en charge linitialisation de la base de donnes. e commons : Cest le projet qui regroupe un ensemble classe utiles pour tous les autres modules. Il ne dpend daucun e autre module du projet.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr 20/??

Le build process

core : Cest le coeur de lapplication, cest ici que lon retrouvera les contrleurs. o datamodel : Le module datamodel contient lensemble de entits JPA. e ear : Ce module est un peu spcial, cest le module maven qui a en charge la compilation de lEAR. il ne contient e aucune source. exploded-ear : Ce dossier nest pas un module maven, mais une vue de lEAR dcompress. Il est parfois utile, e e surtout lorsque lon dbute davoir une vision de comment lEAR est dploy sur le serveur. e e e war : Ce module est la partie Web du projet, mais comme pour les WAR classique, on y retrouve les chiers de conguration principaux (web.xml, faces-cong.xml, pretty-cong.xml)

3.5

Les modules maven

Figure 3.5 Dpendances entre les modules e

Larchitecture du projet gnr par la forge est relativement classique. Le module core est le centre de lapplication, il e e e dpend de lensemble des sources java. Le War et le bootstrap utilisent le core. Le module EAR rcup`re le core, le war et e e e le bootstrap an de gnrer lEAR. Les modules smile-seam et feature sont l` pour mutualiser la conguration maven. e e a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

21/??

Le build process

3.5.1

smile-seam : le module parent

Le projet parent est le module smile-seam. Cest lui qui regroupe les informations globales du projets.
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
<? xml version = " 1.0 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = MAIN PROJECT INFORMATIONS ====================================== ====================================== > < groupId > fr . smile </ groupId > < a r t i f a c t I d> seam3 </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> pom </ p a c k a g i n g> < name > smile - seam </ name > < d e s c r i p t i o n> F o r m a t i o n project on Seam 3 </ d e s c r i p t i o n> <! ====================================== ====================================== = MAIN PROJECT PROPERTIES ====================================== ====================================== > < p r o p e r t i e s> < project . version > 0.1 - SNAPSHOT </ project . version > < project . build . s o u r c e E n c o d i n g> UTF -8 </ project . build . s o u r c e E n c o d i n g> < project . r e p o r t i n g. o u t p u t E n c o d i n g> UTF -8 </ project . r e p o r t i n g. o u t p u t E n c o d i n g> </ p r o p e r t i e s> <! ====================================== ====================================== = MAIN PROJECT MODULES ====================================== ====================================== > < modules > < module > smile - seam - features </ module > </ modules > <! ====================================== ====================================== = ORGANIZATION INFORMATIONS ====================================== ====================================== > < d e v e l o p e r s> <! ADD here a l l developpers > </ d e v e l o p e r s> </ project >

3.5.2

smile-seam-features : code sources de lapplication

Le module features est le projet parent au niveau du code source. Cest lui qui contient le dependancies managers ainsi que les versions des direntes librairies utilises. e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

22/??

Le build process

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = FEATURE PROJECT INFORMATIONS ====================================== ====================================== > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < p a c k a g i n g> pom </ p a c k a g i n g> < version > 0.1 - SNAPSHOT </ version > < name > smile - seam features < / name > <! ====================================== ====================================== = PROPERTIES ====================================== ====================================== > < p r o p e r t i e s> < project . version > 0.1 - SNAPSHOT </ project . version > < project . build . s o u r c e E n c o d i n g> UTF -8 </ project . build . s o u r c e E n c o d i n g> < project . r e p o r t i n g. o u t p u t E n c o d i n g> UTF -8 </ project . r e p o r t i n g. o u t p u t E n c o d i n g> < version . jboss . app >5 </ version . jboss . app > < version . slf4j > 1.6.1 </ version . slf4j > < seam . version > 3.0.1 - SNAPSHOT </ seam . version > < seam . security . version > 3.0.0. Final </ seam . security . version > < seam . p e r s i s t e n c e. version > 3.0.0. Final </ seam . p e r s i s t e n c e. version > < r i c h f a c e s. version > 4.0.0. Final </ r i c h f a c e s. version > < f r e e m a r k e r. version > 2.3.16 </ f r e e m a r k e r. version > < p r i m e f a c e s. version > 3.0. M1 </ p r i m e f a c e s. version > < p r i m e f a c e s. themes . bluesky . version > 1.0.1 </ p r i m e f a c e s. themes . bluesky . version > < p r e t t y f a c e s. jsf2 . version > 3.0.1 </ p r e t t y f a c e s. jsf2 . version > </ p r o p e r t i e s>

<! ====================================== ====================================== = MODULES ====================================== ====================================== > < modules > <! Jar modules > < module > smile - seam - commons </ module > < module > smile - seam - core < / module > < module > smile - seam - d a t a m o d e l</ module > < module > smile - seam - war < / module > < module > smile - seam - b o o t s t r a p</ module > < module > smile - seam - ear < / module > </ modules > <! ====================================== ====================================== = REPOSITORIES ====================================== ====================================== > < r e p o s i t o r i e s> < r e p o s i t o r y> < id > r e p o s i t o r y. jboss . org </ id > < name > JBoss Maven R e p o s i t o r y</ name > < url > http: // r e p o s i t o r y. jboss . org / maven2 </ url > < s n a p s h o t s> < enabled > false </ enabled > </ s n a p s h o t s> < releases > < enabled > true </ enabled > </ releases > </ r e p o s i t o r y> < r e p o s i t o r y> < id > J B O S S _ N E X U S</ id > < url > http: // r e p o s i t o r y. jboss . org / nexus / content / groups / public < / url > </ r e p o s i t o r y>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

23/??

Le build process

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

< r e p o s i t o r y> < id > r e p o s i t o r y. nexus . jboss . org </ id > < name > JBoss R e p o s i t o r y</ name > < url > http: // r e p o s i t o r y. jboss . org / nexus / content / groups / public - jboss / </ url > </ r e p o s i t o r y> < r e p o s i t o r y> < id > prime - repo </ id > < name > Prime T e c h n o l o g y Maven R e p o s i t o r y</ name > < url > http: // r e p o s i t o r y. prime . com . tr </ url > < layout > default </ layout > </ r e p o s i t o r y> </ r e p o s i t o r i e s> <! ====================================== ====================================== = DEPENDENCY M N G M N A A E E T ====================================== ====================================== > < d e p e n d e n c y M a n a g e m e n t> < d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - b o o t s t r a p</ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - core </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - d a t a m o d e l</ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - commons </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < type > jar </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - war </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < type > war </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . apache . commons </ groupId > < a r t i f a c t I d> commons - io </ a r t i f a c t I d> < version > 1.3.2 </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > commons - lang </ groupId > < a r t i f a c t I d> commons - lang </ a r t i f a c t I d> < version > 2.6 </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . slf4j < / groupId > < a r t i f a c t I d> slf4j - simple </ a r t i f a c t I d> < version > ${ version . slf4j } </ version > </ d e p e n d e n c y>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

24/??

Le build process

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

< d e p e n d e n c y> < groupId > org . jboss . spec </ groupId > < a r t i f a c t I d> jboss - javaee -6.0 </ a r t i f a c t I d> < version > 1.0.0. CR1 < / version > < type > pom </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . solder </ groupId > < a r t i f a c t I d> seam - solder </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . config </ groupId > < a r t i f a c t I d> seam - config - xml </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . p e r s i s t e n c e</ groupId > < a r t i f a c t I d> seam - p e r s i s t e n c e</ a r t i f a c t I d> < version > ${ seam . p e r s i s t e n c e. version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . servlet </ groupId > < a r t i f a c t I d> seam - servlet </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . security </ groupId > < a r t i f a c t I d> seam - security </ a r t i f a c t I d> < version > ${ seam . security . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . catch </ groupId > < a r t i f a c t I d> seam - catch </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l</ groupId > < a r t i f a c t I d> seam - i n t e r n a t i o n a l</ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - impl </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - api </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . faces </ groupId > < a r t i f a c t I d> seam - faces </ a r t i f a c t I d> < version > ${ seam . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . r i c h f a c e s</ groupId > < a r t i f a c t I d> richfaces - bom </ a r t i f a c t I d> < version > ${ r i c h f a c e s. version } </ version > < scope > import </ scope > < type > pom </ type > </ d e p e n d e n c y>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

25/??

Le build process

225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299

< d e p e n d e n c y> < groupId > org . r i c h f a c e s. ui </ groupId > < a r t i f a c t I d> richfaces - components - ui </ a r t i f a c t I d> < version > ${ r i c h f a c e s. version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . r i c h f a c e s. core </ groupId > < a r t i f a c t I d> richfaces - core - impl </ a r t i f a c t I d> < version > ${ r i c h f a c e s. version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . f r e e m a r k e r</ groupId > < a r t i f a c t I d> f r e e m a r k e r</ a r t i f a c t I d> < version > ${ f r e e m a r k e r. version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . p r i m e f a c e s</ groupId > < a r t i f a c t I d> p r i m e f a c e s</ a r t i f a c t I d> < version > ${ p r i m e f a c e s. version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . p r i m e f a c e s. themes </ groupId > < a r t i f a c t I d> bluesky < / a r t i f a c t I d> < version > ${ p r i m e f a c e s. themes . bluesky . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . ocpsoft </ groupId > < a r t i f a c t I d> prettyfaces - jsf2 </ a r t i f a c t I d> < version > ${ p r e t t y f a c e s. jsf2 . version } </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . ocpsoft </ groupId > < a r t i f a c t I d> ocpsoft - pretty - time </ a r t i f a c t I d> < version > 1.0.6 </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . weld </ groupId > < a r t i f a c t I d> weld - core </ a r t i f a c t I d> < version > 1.1.1. Final </ version > </ d e p e n d e n c y> </ d e p e n d e n c i e s> </ d e p e n d e n c y M a n a g e m e n t>

<! ====================================== ====================================== = DEPENDENCY ====================================== ====================================== > < d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > org . jboss . spec </ groupId > < a r t i f a c t I d> jboss - javaee -6.0 </ a r t i f a c t I d> < version > 1.0.0. CR1 </ version > < type > pom </ type > < scope > provided </ scope > </ d e p e n d e n c y> </ d e p e n d e n c i e s> <! ====================================== ====================================== = BUILD ====================================== ====================================== > < build > < p l u g i n M a n a g e m e n t> < plugins >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

26/??

Le build process

300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367

< plugin > < a r t i f a c t I d> maven - ear - plugin </ a r t i f a c t I d> < version > 2.4.1 </ version > </ plugin > < plugin > < a r t i f a c t I d> maven - ejb - plugin </ a r t i f a c t I d> < version > 2.2.1 </ version > < c o n f i g u r a t i o n> < e j b V e r s i o n> 3.1 </ e j b V e r s i o n> < archive > < manifest > < a d d C l a s s p a t h> true </ a d d C l a s s p a t h> </ manifest > </ archive > </ c o n f i g u r a t i o n> </ plugin > < plugin > < a r t i f a c t I d> maven - jar - plugin </ a r t i f a c t I d> < version > 2.3 </ version > < e x e c u t i o n s> < e x e c u t i o n> < goals > < goal > test - jar </ goal > </ goals > </ e x e c u t i o n> </ e x e c u t i o n s> </ plugin > < plugin > < a r t i f a c t I d> maven - surefire - plugin </ a r t i f a c t I d> < version > 2.5 </ version > < c o n f i g u r a t i o n> < forkMode > once < / forkMode > < argLine > - e n a b l e a s s e r t i o n s</ argLine > </ c o n f i g u r a t i o n> </ plugin > </ plugins > </ p l u g i n M a n a g e m e n t> </ build > <! ====================================== ====================================== = REPORTING ====================================== ====================================== > < r e p o r t i n g> < plugins > < plugin > < groupId > org . apache . maven . plugins </ groupId > < a r t i f a c t I d> maven - compiler - plugin </ a r t i f a c t I d> < c o n f i g u r a t i o n> < source > 1.6 </ source > < target > 1.6 </ target > </ c o n f i g u r a t i o n> </ plugin > < plugin > < a r t i f a c t I d> maven - javadoc - plugin </ a r t i f a c t I d> < version > 2.6.1 </ version > < c o n f i g u r a t i o n> < a g g r e g a t e> true </ a g g r e g a t e> </ c o n f i g u r a t i o n> </ plugin > < plugin > < a r t i f a c t I d> maven - surefire - report - plugin < / a r t i f a c t I d> < version > 2.5 </ version > </ plugin > </ plugins > </ r e p o r t i n g> </ project >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

27/??

Le build process

3.5.3

smile-seam-commons : la base de lapplication

Le module commons permet de gnraliser des interfaces, enums ou classes pour lensemble de lapplication. En r`gle e e e gnrale le module commons est un JAR. e e
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = C M O S PROJECT INFORMATIONS O M N ====================================== ====================================== > < parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < r e l a t i v e P a t h> ../ pom . xml </ r e l a t i v e P a t h> </ parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - commons </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> jar </ p a c k a g i n g> < name > smile - seam - Commons </ name >

<! ====================================== ====================================== = DEPENDENCY ====================================== ====================================== > < d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > commons - io </ groupId > < a r t i f a c t I d> commons - io </ a r t i f a c t I d> < version > 1.3.2 </ version > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . spec </ groupId > < a r t i f a c t I d> jboss - javaee -6.0 </ a r t i f a c t I d> < version > 1.0.0. CR1 </ version > < type > pom </ type > < scope > provided </ scope > </ d e p e n d e n c y> </ d e p e n d e n c i e s>

<! ====================================== ====================================== = BUILD ====================================== ====================================== > < build > < r e s o u r c e s> < resource > < d i r e c t o r y> src / main / r e s o u r c e s</ d i r e c t o r y> < f i l t e r i n g> true </ f i l t e r i n g> </ resource > </ r e s o u r c e s> </ build > </ project >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

28/??

Le build process

3.5.4

smile-seam-datamodel : Les entits JPA e

Le module datamodel contient lensemble des entits JPA. Cest galement lui qui contient le chier de conguration e e hibernate (persistence.xml). Dautre modules peuvent contenir des entits JPA, mais les mod`les de donnes principaux e e e doivent ce trouver ici.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

29/??

Le build process

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = D T MO E PROJECT INFORMATIONS A A DL ====================================== ====================================== > < parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < r e l a t i v e P a t h> ../ pom . xml </ r e l a t i v e P a t h> </ parent > < a r t i f a c t I d> smile - seam - d a t a m o d e l</ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> ejb </ p a c k a g i n g> < name > smile - seam - D a t a M o d e l</ name >

<! = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = DEPENDENCY = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = > ============ == == == == == == == == == == == == < d e p e n d e n c i e s> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - commons </ a r t i f a c t I d> < type > jar </ type > </ d e p e n d e n c y> </ d e p e n d e n c i e s> <! ====================================== ====================================== = BUILD ====================================== ====================================== > < build > < r e s o u r c e s> < resource > < d i r e c t o r y> src / main / r e s o u r c e s</ d i r e c t o r y> < f i l t e r i n g> true </ f i l t e r i n g> </ resource > </ r e s o u r c e s> </ build > </ project >

3.5.5

smile-seam-core : Le coeur de lapplication

Le module core est le centre de lapplication, cest ici que lon retrouve les contrleurs des direntes pages. Il utilise les o e autres modules (commons, datamodel, etc...) an de restituer ` la vue les dirents traitement que lon souhaite raliser. a e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

30/??

Le build process

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = CORE PROJECT INFORMATIONS ====================================== ====================================== > < parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < r e l a t i v e P a t h> ../ pom . xml </ r e l a t i v e P a t h> </ parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - core </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> ejb </ p a c k a g i n g> < name > smile - seam - core </ name >

<! ====================================== ====================================== = DEPENDENCY ====================================== ====================================== > < d e p e n d e n c i e s> <! : : : : : : : : : : : : : : : : : : : : : : p r o j e c t dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : > < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - commons </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - d a t a m o d e l</ a r t i f a c t I d> < type > ejb </ type > </ d e p e n d e n c y>

<! : : : : : : : : : : : : : : : : : : : : : : : :

l i b dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : : : >

< d e p e n d e n c y> < groupId > org . slf4j </ groupId > < a r t i f a c t I d> slf4j - simple </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . solder </ groupId > < a r t i f a c t I d> seam - solder </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . p e r s i s t e n c e</ groupId > < a r t i f a c t I d> seam - p e r s i s t e n c e</ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y>

< d e p e n d e n c y> < groupId > org . jboss . seam . catch </ groupId > < a r t i f a c t I d> seam - catch </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l</ groupId > < a r t i f a c t I d> seam - i n t e r n a t i o n a l</ a r t i f a c t I d>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

31/??

Le build process

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

< scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . faces </ groupId > < a r t i f a c t I d> seam - faces </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - impl </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - api </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . sun . facelets </ groupId > < a r t i f a c t I d> jsf - facelets </ a r t i f a c t I d> < version > 1.1.15. B1 </ version > < scope > provided </ scope > </ d e p e n d e n c y>

</ d e p e n d e n c i e s>

< build > < r e s o u r c e s> < resource > < d i r e c t o r y> src / main / r e s o u r c e s</ d i r e c t o r y> < f i l t e r i n g> true </ f i l t e r i n g> </ resource > </ r e s o u r c e s> </ build > </ project >

3.5.6

smile-seam-bootstrap : initialiser son application

Le but du bootstrap est dinitialiser lapplication, il est excut au dmarrage du serveur. Il permet par exemple e e e dinitialiser la base de donnes avec des valeurs de rfrences. e ee

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

32/??

Le build process

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = BOOTSTRAP PROJECT INFORMATIONS ====================================== ====================================== > < parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < r e l a t i v e P a t h> ../ pom . xml </ r e l a t i v e P a t h> </ parent >

< groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - b o o t s t r a p</ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> ejb </ p a c k a g i n g> < name > smile - seam - B o o t s t r a p</ name >

<! ====================================== ====================================== = DEPENDENCY ====================================== ====================================== > < d e p e n d e n c i e s> <! : : : : : : : : : : : : : : : : : : : : : : p r o j e c t dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : > < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - core </ a r t i f a c t I d> < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - d a t a m o d e l</ a r t i f a c t I d> < type > ejb </ type > </ d e p e n d e n c y> </ d e p e n d e n c i e s> </ project >

3.5.7

smile-seam-war : le rendu de lapplication

Le module War contient la vue de lapplication ainsi que les chiers de congurations de Seam (web.xml, faces-cong.xml, pretty-cong.xml). On y retrouve aussi les chiers dinternationalisation messages.properties. La particularit du module WAR est le fait de rediriger lensemble de ses dpendances vers le dossier Lib de lear. e e Les EAR ont deux classes Loader, lun pour les EJB et lautre pour le WAR, cest les fameux conteneur de servlets et conteneur EJB. En gnralement il nest pas obligatoire de navoir aucun JAR dans le WAR. Cependant lorsque lon cre e e e des composants JSF qui utilisent des composants dj` existant (composants JSF, richfaces, primefaces) il est obligatoire de ea navoir aucune librairie dans le conteneur de servlets, sous peine davoir des erreurs dinstanciation ou de transtypage du aux classes loaders. La mthode pour rsoudre ce probl`me est simple, via maven on exclue toutes les librairies du packaging. Puis on gn`re e e e e e un chier manifest avec les rfrences des librairies pointant sur le dossier Lib de lEAR. ee

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

33/??

Le build process

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = W R PROJECT INFORMATIONS A ====================================== ====================================== > < parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < r e l a t i v e P a t h> ../ pom . xml </ r e l a t i v e P a t h> </ parent > < a r t i f a c t I d> smile - seam - war </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> war </ p a c k a g i n g> < name > smile - seam - WAR </ name >

<! ====================================== ====================================== = DEPENDENCIES ====================================== ====================================== > < d e p e n d e n c i e s> <! : : : : : : : : : : : : : : : : : : : : : : p r o j e c t dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : > < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - d a t a m o d e l</ a r t i f a c t I d> < type > ejb </ type > </ d e p e n d e n c y>

<! : : : : : : : : : : : : : : : : : : : : : : : : l i b dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > < d e p e n d e n c y> < groupId > org . jboss . seam . solder </ groupId > < a r t i f a c t I d> seam - solder </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . config </ groupId > < a r t i f a c t I d> seam - config - xml </ a r t i f a c t I d> < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . servlet </ groupId > < a r t i f a c t I d> seam - servlet </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . security </ groupId > < a r t i f a c t I d> seam - security </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l</ groupId > < a r t i f a c t I d> seam - i n t e r n a t i o n a l</ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . faces </ groupId > < a r t i f a c t I d> seam - faces </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . r i c h f a c e s. ui </ groupId >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

34/??

Le build process

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

< a r t i f a c t I d> richfaces - components - ui </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . r i c h f a c e s. core </ groupId > < a r t i f a c t I d> richfaces - core - impl </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . f r e e m a r k e r</ groupId > < a r t i f a c t I d> f r e e m a r k e r</ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . p r i m e f a c e s</ groupId > < a r t i f a c t I d> p r i m e f a c e s</ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . p r i m e f a c e s. themes </ groupId > < a r t i f a c t I d> bluesky </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . ocpsoft < / groupId > < a r t i f a c t I d> ocpsoft - pretty - time </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . ocpsoft < / groupId > < a r t i f a c t I d> prettyfaces - jsf2 </ a r t i f a c t I d> </ d e p e n d e n c y> </ d e p e n d e n c i e s>

<! ====================================== ====================================== = BUILD ====================================== ====================================== > < build > < plugins > < plugin > < groupId > org . apache . maven . plugins </ groupId > < a r t i f a c t I d> maven - war - plugin </ a r t i f a c t I d> < c o n f i g u r a t i o n> < p a c k a g i n g E x c l u d e s> WEB - INF / lib /*. jar < / p a c k a g i n g E x c l u d e s> < archive > < manifest > < a d d C l a s s p a t h> true </ a d d C l a s s p a t h> < c l a s s p a t h P r e f i x> ../ lib / </ c l a s s p a t h P r e f i x> </ manifest > </ archive > < w e b R e s o u r c e s> < resource > <! t h i s i s r e l a t i v e to the pom. xml d ir e c t o r y > < d i r e c t o r y> src / main / webapp </ d i r e c t o r y> < f i l t e r i n g> true </ f i l t e r i n g> < includes > < include > **/ c o m p o n e n t s. xml </ include > < include > **/ web . xml </ include > < include > **/ footer . xhtml </ include > </ includes > </ resource > </ w e b R e s o u r c e s> </ c o n f i g u r a t i o n> </ plugin > </ plugins > </ build > </ project >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

35/??

Le build process

3.5.8

smile-seam-ear : lEAR

Le module ear est en charge de la compilation de lear. Il rsous lensemble de dpendances de lapplication et dtermine e e e dans quel dossiers irons les direntes librairies (JAR, EJB et WAR). Pour cela on utilise le plugins EAR de maven. e Le module EAR doit dpendre de toutes les librairies. Pour chaquune delles il faut prciser dans que modules elles e e appartienent(JAR, EJB et WAR).

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

36/??

Le build process

Figure 3.6 Rsultat de la compilation du module EAR e

1 2 3 4 5 6 7 8 9 10 11 12 13 14

<? xml version = " 1.0 " encoding = " UTF -8 " ? > < project xmlns = " http: // maven . apache . org / POM /4.0.0 " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // maven . apache . org / POM /4.0.0 http: // maven . apache . org / maven - v4_0_0 . xsd " > < m o d e l V e r s i o n> 4.0.0 </ m o d e l V e r s i o n> <! ====================================== ====================================== = EAR PROJECT INFORMATIONS ====================================== ====================================== > < parent > < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - features </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

37/??

Le build process

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

< r e l a t i v e P a t h> ../ pom . xml </ r e l a t i v e P a t h> </ parent >

< groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - ear </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT </ version > < p a c k a g i n g> ear </ p a c k a g i n g> < name > smile - seam - EAR </ name >

<! ====================================== ====================================== = DEPENDENCY ====================================== ====================================== > < d e p e n d e n c i e s> <! : : : : : : : : : : : : : : : : : : : : : : p r o j e c t dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : > < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - war </ a r t i f a c t I d> < type > war </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - d a t a m o d e l</ a r t i f a c t I d> < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - b o o t s t r a p</ a r t i f a c t I d> < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - core </ a r t i f a c t I d> < version > 0.1 - SNAPSHOT < / version > < type > ejb </ type > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - commons </ a r t i f a c t I d> < type > jar </ type > </ d e p e n d e n c y>

<! : : : : : : : : : : : : : : : : : : : : : : : : l i b dependency : : : : : : : : : : : : : : : : : : : : : : : : : : : : : > < d e p e n d e n c y> < groupId > org . jboss . spec </ groupId > < a r t i f a c t I d> jboss - javaee -6.0 </ a r t i f a c t I d> < version > 1.0.0. CR1 </ version > < type > pom </ type > < scope > provided </ scope > </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . solder </ groupId > < a r t i f a c t I d> seam - solder </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . config </ groupId > < a r t i f a c t I d> seam - config - xml </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . p e r s i s t e n c e</ groupId > < a r t i f a c t I d> seam - p e r s i s t e n c e</ a r t i f a c t I d> </ d e p e n d e n c y>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

38/??

Le build process

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164

< d e p e n d e n c y> < groupId > org . jboss . seam . servlet </ groupId > < a r t i f a c t I d> seam - servlet </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . security </ groupId > < a r t i f a c t I d> seam - security </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . catch </ groupId > < a r t i f a c t I d> seam - catch </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . i n t e r n a t i o n a l</ groupId > < a r t i f a c t I d> seam - i n t e r n a t i o n a l</ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - impl </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - api </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . jboss . seam . faces </ groupId > < a r t i f a c t I d> seam - faces </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . r i c h f a c e s. ui </ groupId > < a r t i f a c t I d> richfaces - components - ui </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . r i c h f a c e s. core </ groupId > < a r t i f a c t I d> richfaces - core - impl </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . f r e e m a r k e r</ groupId > < a r t i f a c t I d> f r e e m a r k e r</ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . slf4j </ groupId > < a r t i f a c t I d> slf4j - simple </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . p r i m e f a c e s</ groupId > < a r t i f a c t I d> p r i m e f a c e s</ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > org . p r i m e f a c e s. themes </ groupId > < a r t i f a c t I d> bluesky </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . ocpsoft < / groupId > < a r t i f a c t I d> prettyfaces - jsf2 </ a r t i f a c t I d> </ d e p e n d e n c y> < d e p e n d e n c y> < groupId > com . ocpsoft < / groupId > < a r t i f a c t I d> ocpsoft - pretty - time </ a r t i f a c t I d> </ d e p e n d e n c y>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

39/??

Le build process

165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239

</ d e p e n d e n c i e s>

<! ====================================== ====================================== = BUILD ====================================== ====================================== > < build > < plugins > < plugin > < a r t i f a c t I d> maven - ear - plugin </ a r t i f a c t I d> < c o n f i g u r a t i o n> < version >5 </ version >

< jboss > ${ a r t i f a c t I d}/ src / main / r e s o u r c e s/ jboss - app . xml </ jboss > < d e f a u l t L i b B u n d l e D i r> lib </ d e f a u l t L i b B u n d l e D i r> < archive > < manifest > < a d d C l a s s p a t h> true </ a d d C l a s s p a t h> </ manifest > </ archive >

< modules > <! PROJECT MODULES > <! : : : : : : : : : : : : : : : : : : : : : : W R module : : : : : : : : : : : : : : : : : : : : : : : : : : : A > < w e b M o d u l e> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - war </ a r t i f a c t I d> < c o n t e x t R o o t>smile - seam </ c o n t e x t R o o t> < unpack > ${ exploded . war . file } </ unpack > </ w e b M o d u l e> <! : : : : : : : : : : : : : : : : : : : : : : JAR module : : : : : : : : : : : : : : : : : : : : : : : : : : : > < j a r M o d u l e> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - commons </ a r t i f a c t I d> < i n c l u d e I n A p p l i c a t i o n X m l> true </ i n c l u d e I n A p p l i c a t i o n X m l > </ j a r M o d u l e>

<! : : : : : : : : : : : : : : : : : : : : : : EJB module : : : : : : : : : : : : : : : : : : : : : : : : : : : > < e j b M o d u l e> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - d a t a m o d e l< / a r t i f a c t I d> </ e j b M o d u l e> < e j b M o d u l e> < groupId > fr . smile </ groupId > < a r t i f a c t I d> smile - seam - b o o t s t r a p< / a r t i f a c t I d> < excluded > ${ exclude . b o o t s t r a p} </ excluded > </ e j b M o d u l e>

<! SEAM MODULES > < j a r M o d u l e> < groupId > org . jboss . seam . solder </ groupId > < a r t i f a c t I d> seam - solder </ a r t i f a c t I d> </ j a r M o d u l e>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

40/??

Le build process

240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314

< j a r M o d u l e> < groupId > org . jboss . seam . config </ groupId > < a r t i f a c t I d> seam - config - xml </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . p e r s i s t e n c e</ groupId > < a r t i f a c t I d> seam - p e r s i s t e n c e</ a r t i f a c t I d> </ j a r M o d u l e>

< j a r M o d u l e> < groupId > org . jboss . seam . servlet </ groupId > < a r t i f a c t I d> seam - servlet </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . security < / groupId > < a r t i f a c t I d> seam - security </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . catch </ groupId > < a r t i f a c t I d> seam - catch </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . i n t e r n a t i o n a l</ groupId > < a r t i f a c t I d> seam - i n t e r n a t i o n a l</ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - impl </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . rest </ groupId > < a r t i f a c t I d> seam - rest - api </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . jboss . seam . faces </ groupId > < a r t i f a c t I d> seam - faces </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . r i c h f a c e s. ui </ groupId > < a r t i f a c t I d> richfaces - components - ui </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . r i c h f a c e s. core </ groupId > < a r t i f a c t I d> richfaces - core - impl </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . f r e e m a r k e r</ groupId > < a r t i f a c t I d> f r e e m a r k e r</ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . slf4j </ groupId > < a r t i f a c t I d> slf4j - simple </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . p r i m e f a c e s</ groupId > < a r t i f a c t I d> p r i m e f a c e s</ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > org . p r i m e f a c e s. themes </ groupId > < a r t i f a c t I d> bluesky </ a r t i f a c t I d> </ j a r M o d u l e>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

41/??

Le build process

315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354

< j a r M o d u l e> < groupId > com . ocpsoft </ groupId > < a r t i f a c t I d> prettyfaces - jsf2 </ a r t i f a c t I d> </ j a r M o d u l e> < j a r M o d u l e> < groupId > com . ocpsoft </ groupId > < a r t i f a c t I d> ocpsoft - pretty - time </ a r t i f a c t I d> </ j a r M o d u l e>

</ modules >

< jboss > < version > ${ version . jboss . app } </ version > < loader - r e p o s i t o r y> smile - seam:app = ejb3 </ loader - r e p o s i t o r y> </ jboss > </ c o n f i g u r a t i o n> </ plugin > < plugin > < a r t i f a c t I d> maven - resources - plugin </ a r t i f a c t I d> < c o n f i g u r a t i o n> < o u t p u t D i r e c t o r y > ${ basedir }/ target </ o u t p u t D i r e c t o r y> </ c o n f i g u r a t i o n> </ plugin > </ plugins > < r e s o u r c e s> < resource > < f i l t e r i n g> true </ f i l t e r i n g> < d i r e c t o r y> src / main / r e s o u r c e s</ d i r e c t o r y> </ resource > </ r e s o u r c e s> </ build > </ project >

3.6

Les scripts ant

Nous avons vu lensemble de chiers de conguration Maven pour la compilation du projet. Maven nest pas utilis pour e le dploiement de lapplication ni pour le packaging de livraison. Pour cela le projet contient un ensemble de script ant, un e principal, et un par module maven.

3.6.1

Build smile-seam

Le script ANT contenu ` la racine du projet parent permet la construction globale de lapplication. Il est galement en a e charge de grrer le package de livraison et la construction du exploded-ear e e copyToJBoss : Permet le dploiment de lexploded-ear dans JBoss e deploy (defaut) : cest la target par dfaut, elle consiste en la compilation du projet et son dploiement sur le serveur e e dapplication. Elle neectue pas la compilation de la documentation. install : Cette tche permet de rsoudre les dpendances maven. Cela quivaut ` un mvn clean install a e e e a makeDelivery : Cette tche permet de construire un package de livraison, comportant les chiers spciques ` a e a lenvironnement ainsi que la compilation de la documentation. documentation-clean : Permet de supprimer les chiers temporaire LaTeX. documentation-convert-img : Permet la conversion des images de la documentation au format EPS.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr 42/??

Le build process

documentation-build-quick : Permet une compilation rapide de la documentation, les images ne seront pas convertis. documentation-build : Permet de compiler la documentation, les sources des images seront galement convertis en e EPS.

3.6.2

Build bootstrap, commons, core et datamodel

Les scripts ant pour les dirents modules java fonctionnent de la mme faon. Ils permettent simplement de compiler e e c les sources et les dployer dans le serveur dapplication. e deploy (default) : Cest la target par dfaut, elle compile les sources java et les dpolit sur le serveur. e e install : Equivalent ` un mvn clean install a Le fait de dployer le module permet son rechargement ` chaud. Cependant cela ne fonctionne pas sous Windows du e a fait de la gestion de son les system qui ne permet pas de modier un chier en cours de lecture.

3.6.3

Build war

Le module WAR est un peu dirent, on doit avoir la possibilit de dployer soit toutes les ressources, soit lensemble e e e du WAR. install (default) : Cible par dfaut, quivaux ` un mvn clean install e e a full war : Permet de dployer lensemble du WAR ressources et chiers de conguration). Les chiers de conguration e ne peuvent tre charger ` chaud par le serveur, un redmarrage est donc ncessaire. e a e e web : Permet le dploiement de chiers ressources uniquement. Ces chiers sont directement charger ` chaud par le e a serveur dapplication.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

43/??

Troisi`me partie e

Seam : Le coeur

44

EJB 3.1

EJB 3.1
Apr`s avoir vu comment construire une application sous Seam il est temps de regarder de plus pr`s comment lutiliser. e e

4.1

Les composants Seam

Les pages dans Seam nont pas rellement un contrleur. Les pages font appel ` un ensemble dEJB permettant de e o a rcuprer les divers informations dont elles ont besoin. On peut tr`s bien avoir plusieurs EJB intragissant pour lachage e e e e dune page. Cependant par convention lEJB principal contrlant la page porte le mme nom que cette derni`re. De plus son emplaceo e e ment est rgis par convention. e

Figure 4.1 ` gauche lemplacement du chier Xhtml, ` droite celui du contrleur EJB a a o Nous avons donc nos contrleurs dans le package fr.smile.seam.core.action. On peut remarquer que le contrleur na o o pas dinterface, en EJB 3.1 elles ne sont plus obligatoire, il faut donc en mettre uniquement, si cela est ncessaire. Dans le e cas o` on a plusieurs implmentations dune mme interface il est ` proscrire de mettre Impl ` la n du nom du contrleur, u e e a a o il vaut mieux choisir un suxe vocateur (default, mock, etc...). e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

45/??

EJB 3.1

Dans le cas de composant Seam nayant pas de rendu (les services par exemple), ces EJB ne doivent pas se placer dans le package action. Il ne faut pas hsiter ` subdiviser ses packages pour avoir de petit ensemble cohrent. Le but tant en cas e a e e de refactoring de pouvoir externaliser les packages dans des modules maven spars. e e

4.1.1

Rfrencer les composants Seam ee

Les composants Seam sont des EJB, cependant il faut notier la classe loader 1 de la prsence des EJBs. Pour cela il e faut ajouter un chier beans.xml dans le dossier resources/META-INF de notre module maven.
1 2 3 4 5 6 7
<? xml version = " 1.0 " encoding = " UTF -8 " ? > < beans xmlns = " http: // java . sun . com / xml / ns / javaee " x m l n s : x s i= " http: // www . w3 . org /2001/ XMLSchema - instance " x s i : s c h e m a L o c a t i o n= " http: // java . sun . com / xml / ns / javaee http: // java . sun . com / xml / ns / javaee / b e a n s _ 1 _ 0. xsd " >

</ beans >

D`s lors, les classes loader analyseront les sources pour charger les dirents EJB. Le chier beans.xml permet galement e e e une approche Spring Like, mais lintrt en est plutt limit. e e o e

4.1.2

Donner un nom ` ses composants Seam a

Les EJB ont besoin dun nom de ressource JNDI, pour cela il faut prciser par annoation le nom que lon souhaite. e 4.1.2.1 @Named

Lannotation @Named permet de donner pour nom ` lEJB celui de la classe dcapitalise a e e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
package fr . smile . seam . core . actions . home ; import import import import java . io . S e r i a l i z a b l e; javax . e n t e r p r i s e. context . S e s s i o n S c o p e d; javax . inject . Inject ; javax . inject . Named ;

@SessionScoped @Named public class Home i m p l e m e n t s S e r i a l i z a b l e { private static final long s e r i a l V e r s i o n U I D = - 4 7 4 6 6 7 3 0 4 1 3 63 46 90 36L ; public String getValue () { return " Hello the world " ; } }

Ce qui permet daccder directement ` lattribut value via le nom du contrleur home. e a o
1 2
< h:outputText value = " #{ home . value } " id = " c t r _ w i t h _ n a m e d _ a n n o t a t i o n"

Lannotation @Named peut prendre en param`tre une cha de caract`res permettant de prciser un autre nom que celui e ne e e de la classe.
1. dans le cas prsent cest Seam Solder qui rfrence les EJB e ee

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

46/??

EJB 3.1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2

package fr . smile . seam . core . actions . home ; import import import import java . io . S e r i a l i z a b l e; javax . e n t e r p r i s e. context . S e s s i o n S c o p e d; javax . inject . Inject ; javax . inject . Named ;

@SessionScoped @Named ( " h o m e A c t i o n s" ) public class Home i m p l e m e n t s S e r i a l i z a b l e { private static final long s e r i a l V e r s i o n U I D = - 4 7 4 6 6 7 3 0 4 1 3 63 46 90 36L ; public String getValue () { return " Hello the world " ; } }

< h:outputText

value = " #{ h o m e A c t i o n s. value } " id = " c t r _ w i t h _ n a m e d _ a n n o t a t i o n"

4.1.2.2

@FullyQualied

Lannotation @FullyQualied permet davoir un nom compos du class path. Cela est parfois ncessaire si on a plusieurs e e EJB avec le mme nom. e
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2
package fr . smile . seam . core . actions . home ; import import import import java . io . S e r i a l i z a b l e; javax . e n t e r p r i s e. context . S e s s i o n S c o p e d; javax . inject . Inject ; javax . inject . Named ;

@SessionScoped @FullyQualified @Named public class Home i m p l e m e n t s S e r i a l i z a b l e { private static final long s e r i a l V e r s i o n U I D = - 4 7 4 6 6 7 3 0 4 1 3 63 46 90 36L ; public String getValue () { return " Hello the world " ; } }

< h:outputText

value = " #{ fr . smile . seam . core . actions . home . home . value } " id = " c t r _ w i t h _ f u l l y Q u a l i f i e d _ a n n o t a t i o n"

On peut remarque que lutilisation du @FullyQualied rend particuli`rement illisible les appels aux EJB. Il faut donc e utiliser cette annotation seulement sil ny a pas dautre choix. Le fait davoir le class path dans les appels dEJB ajoute une grande contrainte lors des refactoring. Lannotation @FullyQualied a quand mme besoin de lannotation @Named pour fonctionner. De la mme faon quavec e e c un @Named seul, on peut ajouter une cha de caract`res pour prciser le nom. Mais tout cela ajoute de la complexit pas ne e e e forcment ncessaire. e e Pour les dveloppeurs habitus ` Spring, @Named correspond aux bean id. e e a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

47/??

EJB 3.1

4.1.3

Les scopes

Seam et JEE6 proposent un large ventail de scopes allant du RenderScope au ApplicationScope. La bonne comprhension e e et utilisation des dirents scopes est extrmement important pour les performances dune application. e e

Figure 4.2 Reprsentation du packaging EAR e @ApplicationScoped : Cest le scope le plus large, il est actif jusqu` larrt du serveur. On y met des objets souvent a e utiliss par plusieurs utilisateurs, ou des valeurs globales ` lensemble de lapplication. e a @SessionScoped : Le scope le plus classique, qui correspond ` une session http. On y retrouve gnralement des a e e objets lis ` un utilisateur (prole utilisateur, panier, etc...) e a @ConversationScoped : Le scope conversation est particulier ` lunivers JSF, il correspond a une dure de vie sur a e plusieurs pages. Typiquement il est surtout utilis dans des formulaires type wizzard avec plusieurs pages. e @ViewScoped : Le scope view, dj` introduit par Seam 2.x, correspond ` lensemble de requtes HTTP sur une ea a e mme page. Le scope est vid au moment o` lutilisateur change de page. e e u @RequestScoped : Le scope request est le plus classique de tous, il correspond ` une requte HTTP. a e @RenderScoped : Le scope Render est nouveau dans Seam 3, il permet davoir un scope tr`s court au moment du e rendu. Pour dnir le scope de nos composants Seam il sut simplement dajouter lannotation du scope. e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

48/??

EJB 3.1

Pour les scopes application, session et conversation il est obligatoire que notre EJB implmente e linterface Serializable. il est prfrable que lensemble des EJB implmentent cette interface. ee e

4.1.4

Linjection de dpendance : JSR-299 CDI e

La JSR-299 est le point central de JEE6. Cest dailleurs lui qui a fait polmique lorsque Spring Source est venu modier e la norme 3 mois avant la sortie de JEE 6. Pour rappel les travaux pour spcier les Web-beans qui constituent la norme e JSR-299 avaient dbut 3 ans avant la sortie de JEE 6. e e 4.1.4.1 @Inject

Le Context Dependency Injection est lvolution de composants Seam que lon retouvait dans la version 2. Le e concept reste identique, les composants Seam peuvent tre injects les uns dans les autres. Linjection des composants se e e fait via lannotation @Inject. Pour que Seam puisse faire linjection il faut que le nom de la variable correspond au nom de la ressource JNDI (si on met @Named a sera le nom dcapitalis de la classe), avec pour type celui de la classe que lon c e e souhaite injecter.
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 27 28 29 30 31 32 33 34 35 36 37 38 39
package fr . smile . seam . core . services ; import import import import import import import java . io . S e r i a l i z a b l e; java . util . A r r a y L i s t; java . util . List ; javax . a n n o t a t i o n. P o s t C o n s t r u c t; javax . e n t e r p r i s e. context . C o n v e r s a t i o n S c o p e d; javax . faces . model . S e l e c t I t e m; javax . inject . Named ;

@ConversationScoped @Named public class R e f e r e n c e s D a t a s i m p l e m e n t s S e r i a l i z a b l e { // ATTRIBUTS // private static final long s e r i a l V e r s i o n U I D = - 4 7 7 0 9 4 9 6 7 5 2 7 81 59 76 3L ; private List < SelectItem > technos ;

// METHODS // @PostConstruct p r o t e c t e d void create () { technos = new ArrayList < SelectItem >() ; technos . add ( new S e l e c t I t e m( " py " , " Python " ) ) ; technos . add ( new S e l e c t I t e m( " c " , " C / C ++ " ) ) ; technos . add ( new S e l e c t I t e m( " jee " , " JEE " ) ) ; technos . add ( new S e l e c t I t e m( " sh " , " Shell " ) ) ; }

// GETTERS & SETTERS // public List < SelectItem > g e t T e c h n o s() { return technos ; } public void s e t T e c h n o s( List < SelectItem > technos ) { this . technos = technos ; } }

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

49/??

EJB 3.1

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

package fr . smile . seam . core . actions . home ;

import import import import import import

java . io . S e r i a l i z a b l e; javax . e n t e r p r i s e. context . S e s s i o n S c o p e d; javax . inject . Inject ; javax . inject . Named ; org . jboss . seam . solder . logging . Logger ; fr . smile . seam . core . services . R e f e r e n c e s D a t a s;

/ C o nt r o l l e r o f home page . / @SessionScoped @Named public class Home i m p l e m e n t s S e r i a l i z a b l e { // ATTRIBUTS // private static final long serialVersionUID = - 4 7 4 6 6 7 3 0 4 1 3 63 46 90 36L ; @Inject private Logger @Inject private R e f e r e n c e s D a t a s private String

log ;

r e f e r e n c e s D a t a s; t e c h n o S e l e c t e d;

// METHODS // public void select () { log . info ( t e c h n o S e l e c t e d) ; } // GETTERS & SETTERS // public String getTest () { log . info ( " >>>> get Test ... " ) ; return " Hello " ; } public R e f e r e n c e s D a t a s g e t R e f e r e n c e s D a t a s() { return r e f e r e n c e s D a t a s; } public void s e t R e f e r e n c e s D a t a s( R e f e r e n c e s D a t a s r e f e r e n c e s D a t a s) { this . r e f e r e n c e s D a t a s = r e f e r e n c e s D a t a s; } public String g e t T e c h n o S e l e c t e d() { return t e c h n o S e l e c t e d; } public void s e t T e c h n o S e l e c t e d( String t e c h n o S e l e c t e d) { this . t e c h n o S e l e c t e d = t e c h n o S e l e c t e d; } }

Dans cet exemple on peut voir que la classe ReferencesDatas est inject dans la classe Home (@Inject private Refere encesDatas referencesDatas ). Au moment de linjection, Seam rcup`re le composant depuis son Scope, si il ne le trouve e e pas, il instancie un nouvel objet. Linjection CDI ne ncessite aucun getters et setters pour fonctionner. Il ny a pas besoin de conguration XML non plus. e Lnorme avantage de travailler par annotations est que lon voit directement dans la classe quelles sont ses dpendances. e e Lutilisation de chier XML pour linjection de dpendance ` la Spring like entraine rapidement une grande complexit sur e a e des projets de grandes envergures. De plus dans le cas o` de nouveaux dveloppeurs arrivent sur un projet la conguration u e XML est beaucoup plus complexe ` apprhender. a e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

50/??

EJB 3.1

Notre classe Home poss`de un accesseur sur notre objet referencesDatas. Bien que lon peut accder directement au e e composant referencesDatas du cot JSF il est quen mme prfrable que ce soit le contrler qui centralise les appels aux e e ee o dirents services. Dans le cas o` le composant est utilis par plusieurs controlers, l` il sera prfrable dappeler directement e u e a ee le composant.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
< r i c h : p a n e l id = " panel " header = " This is the panel header " > < div id = " v a l u e _ s e l e c t e d" > < h2 id = " value " > Selected techno : #{ home . t e c h n o S e l e c t e d} </ h2 > </ div > < div id = " f o r m _ c o n t e n t" > < h:form id = " form " > < h : s e l e c t O n e M e n u id = " s u b s c r i p t i o n s" value = " #{ home . t e c h n o S e l e c t e d} " > < f : s e l e c t I t e m s value = " #{ home . r e f e r e n c e s D a t a s. technos } " / > </ h : s e l e c t O n e M e n u > < h : c o m m a n d B u t t o n id = " submit " value = " Select it ! " action = " #{ home . select } " / > </ h:form > </ div > </ r i c h : p a n e l>

Figure 4.3 Liste droulante initialis via un SelectItems e e 4.1.4.2 @Exact

Dans certain cas on souhaite rcuprer une implmentation particuli`re dune interface. Lannotation @Exact permet e e e e cela.
1 2 3 1 2 3 1 2 3
interface PaymentService { ... } class C h e q u e P a y m e n t S e r v i c e i m p l e m e n t s P a y m e n t S e r v i c e { ... } class C a r d P a y m e n t S e r v i c e i m p l e m e n t s P a y m e n t S e r v i c e { ... }

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

51/??

EJB 3.1

1 2 3 4 5 6 7

class P a y m e n t P r o c e s s o r { @Inject @Exact ( C a r d P a y m e n t S e r v i c e. class ) P a y m e n t S e r v i c e p a y m e n t S e r v i c e; ... }

Dans cet exemple, a sera le composant CardPaymentService qui sera inject. c e 4.1.4.3 @Resource

Il est possible dinjecter des ressources properties, o` des chiers de conguration XML directement en annotation. Cela u est permis par lannotation @Resource combin ` l@Inject. ea
1 2 3 4 5 6 7 8 9 10 11 12
@Inject @ R e s o u r c e( " WEB - INF / beans . xml " ) URL beansXml ;

@Inject @ R e s o u r c e( " WEB - INF / web . xml " ) I n p u t S t r e a m webXml @Inject @ R e s o u r c e( " META - INF / aws . p r o p e r t i e s" ) Properties awsProperties

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

52/??

La persistance des donnees : JPA 2.0

La persistance des donnes : JPA 2.0 e

//TODO. . ..

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

53/??

Quatri`me partie e

Templating JSF

54

JSF est devenu limplmentation frontal standard JEE 6. beaucoup de dveloppeurs ayant ha e e ssaient JSF 1.1 ont du mal ` comprendre ce choix. JSF a normment volu depuis, principalement grce ` JBoss. Cette technologie est devenu a e e e e a a extrmement simple et performante. e Beaucoup de dveloppeurs ont t habitu des JSP, qui permettent de faire des templates plus ou moins propres, mme e ee e e si dans beaucoup de cas on arriv ` des JSP compl`tement crapoteuses. JSF ne permet pas dcrire des scriplets, le e a e e dveloppement se doit dtre conu via des beans. De mme JSF implmente du XHTML, vitant ainsi loublie de fere e c e e e meture de balises. JSF nest pas uniquement ddi ` produire du HTML, il peut tr`s bien gnrer dautre format ou dautre e ea e e e type de rendu (par exemple gnrer un mail avec des pi`ces jointes). e e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

55/??

Mon premier Template JSF

Mon premier Template JSF


La premi`re chose ` savoir faire lors que lon travail sur JSF, est de raliser un template principale. e a e

On part donc sur une base de chier XHTML, ou HTML5. Etant donn que certains composants JSF sont en HTML5 e il est prfrable de partir la dessus (les diagrammes de primefaces 3 sont des composants HTML5, de mme pour lupload ee e de chier).
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 27
< html > < head > < meta charset = " utf -8 " / > < title > </ title > </ head > < body id = " m a i n _ b o d y" > < header id = " header " > < nav id = " h e a d e r _ n a v" > </ nav > </ header >

< div id = " content " > </ div > < footer id = " footer " > < nav id = " f o o t e r _ n a v" > </ nav > </ footer > </ body > </ html >

Jusquici cest un simple chier HTML tout ce quil y a de plus classique. Il est toute fois tr`s important de mettre des e ids sur tous les lments. Cela permet de facilit la cration de teste Selenium. De plus pour le fonctionnement de JSF, il est ee e e ncessaires davoir des ID, si les dveloppeurs les oublient, JSF attribuera des ID automatiques, gnralement plutt illisible e e e e o et changeant ` chaque dmarrage serveur. a e Pour transformer cette page en template JSF il faut lui rajouter un composant f :view. Pour permettre ` JSF de bien a charger les direntes ressouces quauront besoin les dirents composants, il faut remplacer le head et body par h :head e e et h :body. Etant donn que les templates JSF sont du XML, il faut penser ` ajouter les namespaces. e a
1 2 3 4 5 6 7 8
< f:view xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:ui = " http: // java . sun . com / jsf / facelets " dir = " ltr " c o n t e n t T y p e= " text / html " id = " #{ messages [ project . name ]} " > < html >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

56/??

Mon premier Template JSF

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

< h:head > < meta charset = " utf -8 " / > < title > #{ messages [ project . name . full ]} </ title > </ h:head >

< h:body id = " m a i n _ b o d y" > < header id = " header " > < nav id = " h e a d e r _ n a v" > </ nav > </ header >

< div id = " content " > </ div >

< footer id = " footer " > < nav id = " f o o t e r _ n a v" > </ nav > </ footer > </ h:body > </ html > </ f:view >

On peut remarquer plusieurs choses : le composant f :view englobe toute la page et dnit un mimetype (text/html). Ce mimetype permet a JSF de forcer e le serveur ` renvoyer dans sa rponse ce type. Si ce param`tre nest pas renseign cest le serveur dapplication qui a e e e dterminera le mimetype de la page. Le template tant du xhtml, la rponse serveur sera du type xml/application. e e e Le soucie cest que mise ` part FireFox qui dtermine par lui mme le vrais mimetype du chier, les autres navigateurs a e e interprteront mal la page, et certains scripts JavaScript ne fonctionneront plus. e Le composant f :view a un ID. Cela est particuli`rement important pour les formulaires. JSF prexe les champs des e formulaires avec les ID du composant f :view et des f :subview. Il faut donc imprativement renseigner ces ID pour e viter de se retrouver avec des ID automatiques, cela toujours pour simplier les tests Selenium ainsi que lcriture de e e JavaScript. LID du composant f :view est renseign par le nom de lapplication dnit dans les chiers messages.properties. e e Lutilisation de ces chiers properties est tr`s simple et bien plus claire quen JSP. e Pour transformer cette exemple en template JSF il faut rajouter des composants Facelets : les ui :insert et ui :include. Lui :insert va permettre de dnir des zones qui seront ` implmenter par les pages utilisant le template. e a e Lui :include permet dinsrer des fragments HTML, cest exactement le mme principe que lon retrouve dans tous les e e syst`me de templating. e
1 2 3 4 5 6 7 8
< f:view xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:ui = " http: // java . sun . com / jsf / facelets " dir = " ltr " c o n t e n t T y p e= " text / html " id = " #{ messages [ project . name ]} " > < html >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

57/??

Mon premier Template JSF

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

< u i : r e m o v e> <! HEAD > < h:head > < meta charset = " utf -8 " / > < title > #{ messages [ project . name . full ]} </ title > < link rel = " icon " href = " #{ resource [ img / icons / favicon . ico ]} " / > < h : o u t p u t S t y l e s h e e t name = " default . css " library = " s t y l e s h e e t" / > < h : o u t p u t S t y l e s h e e t name = " primefaces - theme . css " library = " s t y l e s h e e t" / > < h : o u t p u t S t y l e s h e e t name = " richfaces - theme . css " library = " s t y l e s h e e t" / > < u i : i n s e r t name = " header " / > </ h:head >

< u i : r e m o v e> <! BODY > < h:body id = " m a i n _ b o d y" >

< u i : r e m o v e> <! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CONTENT HEADER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > +++++++++++ ++ ++ ++ ++ ++ ++ ++ ++ + ++ ++ ++ </ u i : r e m o v e> < header id = " header " > < u i : i n c l u d e src = " menu . xhtml " / > </ header > < u i : r e m o v e> <! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CONTENT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > +++++++++++ ++ ++ ++ ++ ++ ++ ++ ++ + ++ ++ ++ < div id = " content " > < div id = " c o n t e n t _ t i t l e" > < u i : i n s e r t name = " title " / > </ div > < div id = " page " > < u i : i n s e r t name = " body " / > </ div > </ div >

< u i : r e m o v e> <! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FOOTER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > +++++++++++ ++ ++ ++ ++ ++ ++ ++ ++ + ++ ++ ++ < footer id = " footer " > < u i : i n c l u d e src = " footer . xhtml " / > </ footer > </ h:body > </ html > </ f:view >

On remarque galement lutilisation du composant ui :remove qui permet dinsrer des commentaires qui ne seront pas e e visible lors de la restitution de la page. Il est tr`s important dajouter des commentaires dans les page pour une meilleurs e comprhension de lapplication ainsi que pour une bien meilleure lisibilit du code. Beaucoup de dveloppeurs reprochent ce e e e principe de dcoration du code. Cependant cela apporte une lecture bien plus agrable. Un code beau ` lil donne bien plus e e a de motivation ` un dveloppeur quun code compacte, non ar et sans commentaires. Les templates JSF se doivent dtre a e e e e extrmement claire an de permettre une intgration plus simple du rendu de lapplication. e e On peut reprocher ` JSF que la seule mthode lgante davoir des commentaires soit le composant ui :remove qui a e ee prend beaucoup de place compar ` un simple caract`re. ea e Le composant ui :include a un param`tre src permettant dinsrer le fragment HTML. Le chemin vers les fragment e e HTML sont relatif ` lemplacement du template. En r`gle gnrale on place le menu et le footer dans le mme dossier que a e e e e le template, cest pour cela que lon a uniquement le nom du chier.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

58/??

Mon premier Template JSF

Lui :insert quand ` lui ` un param`tre name, cela permet de dnir le nom de la zone que devra implmenter les pages. a a e e e Une fois que notre template est ralis, nous pouvons construire nos pages JSF. Pour cela elles doivent imprativement e e e dbuter leur dclaration par le composant ui :composition. Ce composant a un attribut qui permet de spcier le template e e e quutilise la page. Le chemin est relatif par rapport au dossier webapp dans le WAR.
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
<! DOCTYPE c o m p o s i t i o n PUBLIC " -// W3C // DTD XHTML 1.0 T r a n s i t i o n a l// EN " " http: // www . w3 . org / TR / xhtml1 / DTD / xhtml1 - t r a n s i t i o n a l. dtd " > < u i : c o m p o s i t i o n xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:s = " http: // jboss . com / products / seam / taglib " xmlns:ui = " http: // java . sun . com / jsf / facelets " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " x m l n s : r i c h= " http: // r i c h f a c e s. org / rich " xmlns:p = " http: // p r i m e f a c e s. prime . com . tr / ui " template = " layout / template . xhtml " >

< u i : r e m o v e> <! TITLE > </ u i : r e m o v e> < u i : d e f i n e name = " title " > Welcome to Seam ! </ u i : d e f i n e>

< u i : r e m o v e> <! BODY > </ u i : r e m o v e> < u i : d e f i n e name = " body " > < r i c h : p a n e l id = " panel " header = " This is the panel header " > < div id = " v a l u e _ s e l e c t e d" > < h2 id = " value " > Selected techno : #{ home . t e c h n o S e l e c t e d} </ h2 > </ div > < div id = " f o r m _ c o n t e n t" > < h:form id = " form " > <h:selectOneMenu id = " s u b s c r i p t i o n s" value = " #{ home . t e c h n o S e l e c t e d} " >

< f : s e l e c t I t e m s value = " #{ home . r e f e r e n c e s D a t a s. technos } " / > </ h : s e l e c t O n e M e n u> <h:commandButton id = " submit " value = " Select it ! " action = " #{ home . select } " / >

</ h:form > </ div > </ r i c h : p a n e l> </ u i : d e f i n e> </ u i : c o m p o s i t i o n>

Le composant ui :dene permet dinsrer le contenu HTML dans les zone que lon a dni dans le template. Pour que e e cela fonctionne il vaut que les noms soient identiques. On remarque aussi que les pages ne sont pas obliges dimplmenter e e toutes les zones dnit dans le template. Dans notre exemple on na pas ajouter dui :dene pour la zone hearder e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

59/??

Mon premier Template JSF

Les templates peuvent galements hriter dun autre template. Cela permet davoir uniquement les zones spciques des e e e pages ` implmenter. Les templates spciques doivent comme les pages JSF commencer leurs dclarations par le composants a e e e ui :composition.

Figure 6.1 Hritage entre templates JSF e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

60/??

Les principaux composants JSF

Les principaux composants JSF


JSF comporte trois principales biblioth`ques de composants : e JSF Core : dnit par la lettre f e JSF Html : dnit par la lettre h e JSF Facelets : dnit par les lettres ui e Il est important pour utiliser JSF de connaitre les composants que proposent ces trois tag libs.

7.1

Les composants JSF core


f :actionListener

7.1.1

Laction listener permet de lier un vnement HTML ` un EJB. Ce composant est rarement utilis. e e a e Attributs : type : cet attribut permet de dnir le class path de la classe dcoute. e e Exemple :
1 2 3 4 5
< form id = " form1 " > < h : c o m m a n d B u t t o n id = " button1 " value = " Click " > < f : a c t i o n L i s t e n e r type = " com . m y c o m p a n y. A c t i o n L i s t e n e r I m p l" / > </ h : c o m m a n d B u t t o n> </ form >

7.1.2

f :attribute

Le composant f :attribute permet de spcier un param`tre ` lintrieur dun composant. Toutefois il est prfrable de e e a e ee dnir les param`tres dun composant directement avec les attributs XML. e e Attributs : name value le nom du param`tre e la valeur du param`tre e

Exemple :
1 2 3 4 5
< h : c o m m a n d B u t t o n id = " button1 " name = " Click Me " / > < h : c o m m a n d B u t t o n id = " button2 " > < f : a t t r i b u t e name = " value " value = " Click Me " > </ f : a t t r i b u t e> </ h : c o m m a n d B u t t o n>

Le bouton 1 et 2 acheront exactement la mme chose, cependant dans certains cas, il peut tre pratique de pouvoir e e dnir les param`tres via le composant f :attribute. e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

61/??

Les principaux composants JSF

7.1.3

f :convertDateTime

Ce composant est plutt pratique pour lachage des dates. Il permet de formater un Objet java Date. Il peut galement o e les modier en fonction de la locale de lutilisateur. Attributs :

dateStyle

cet attribut permet de spcier un format pr-dnit e e e default short medium long full Jan 1, 2006 1 :20 :45 PM 1/1/06 1 :20 :45 PM Jan 1, 2006 1 :20 :45 PM January 1, 2006 1 :20 :45 PM Sunday, January 1, 2006 1 :20 :45 PM

locale pattern timeStyle timeZone type

Permet de spcier la locale, si on ne la dnit pas cest celle par dfaut qui est utilis (FacesContext .getViewe e e e Root() .getLocale()). Identique au principe du SimpleDateFormat, le pattern permet le formatage de la date suivant des lettres cls. e (d MMM yyyy HH :mm :ss donnera 1 Jan 2006 10 :05 :30) Identique ` lattribut dateStyle, mais dans le cas o` la date sur laquelle le composant agit est du type time. a u permet de dnir le fuseau horaire. e permet de dnir si la date est du type date, time, ou les deux (both) e

Le composant f :convertDateTime se place ` lintrieur dun composant h :outputText. a e Exemple :


1 2 3
< h : o u t p u t T e x t value = " #{ dateBean . today } " > < f : c o n v e r t D a t e T i m e d a t e S t y l e= " full " timeZone = " EST " type = " date " / > </ h : o u t p u t T e x t>

Rendu HTML :
1
Sunday , January 1 , 2006

7.1.4

f :converter

Le composant f :converter permet dinvoquer un convertisseur personnalis. e Attributs :

converterId Exemple :
1 2 3 4

lid du convertisseur personnalis e

< h : s e l e c t O n e M e n u value = " #{ c u s t o m e r B e a n. customer . address . country } " > < f : c o n v e r t e r c o n v e r t e r I d= " c o u n t r y C o n v e r t e r" > </ f : c o n v e r t e r> < f : s e l e c t I t e m s value = " #{ l o c a t i o n B e a n. c o u n t r y L i s t} " > </ f : s e l e c t I t e m s> </ h : s e l e c t O n e M e n u>

Rendu HTML :

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

62/??

Les principaux composants JSF

1 2 3 4 5

< select > < option value = " 1 " > Canada < / option > < option value = " 2 " > USA </ option > ... </ select >

7.1.5

f :convertNumber

Comme pour le composant f :convertDateTime, le composant f :convertNumber permet le formatage de nombres. Attributs :

currencyCode currencySymbol groupingUsed integerOnly locale maxFractionDigits maxIntegerDigits minFractionDigits minIntegerDigits pattern type

Permet de formater un nombre reprsentant un tarif sous la norme ISO4217. Par exemple pour formater u e en Dollar Amricain on utilisera le code USD. e Permet de spcier le symbole ` acher pour une monnaie. e a Permet de spcier le symbole du sparateur des milliers. e e Permet de nacher que la partie entier du nombre. Permet de spcier une locale spcique. e e Spcie le nombre de chire apr`s la virgule. e e Spcie le nombre maximal de chire dans la partie enti`re du nombre e e Spcie le nombre minimal de chire ` acher apr`s la virgule. (exemple, si on met 2, les nombres ser e a e type 1,00 ). Spcie le nombre minimal de chire dans la partie enti`re du nombre. e e Permet de spcier un pattern spcique pour le formatage du nombre. e e Permet de spcier le type du nombre, si il est une monnaie (currency), un pourcentage (percentage) e nombre (number).

Exemple :
1 2 3 4 5 6
< h : o u t p u t T e x t id = " balance " value = " #{ a c c o u n t B e a n. balance } " > < f : c o n v e r t N u m b e r c u r r e n c y S y m b o l= "" g r o u p i n g U s e d= " #{ true } " m a x F r a c t i o n D i g i t s= " 2 " type = " currency " / > </ h : o u t p u t T e x t>

Rendu HTML :
1 2
1 ,234 ,567.89

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

63/??

Les principaux composants JSF

7.1.6

f :facet

Le composant f :facet est un peu spcique, il permet de renseigner des zones dun autre composant. On le retrouve e dans beaucoup de composants RichFaces, PrimeFaces, etc... Attributs : name Spcie la zone du composant ` implmenter. e a e

Exemple :
1 2 3 4 5 6 7 8
< h : d a t a T a b l e id = " r e p o r t T a b l e" value = " #{ r e p o r t B e a n. d a i l y R e p o r t} " var =" item " > < h:column > < f:facet name = " header " > < h : o u t p u t T e x t value = " Daily Report " / > </ f:facet > < h : o u t p u t T e x t value = " #{ item } " / > </ h:column > </ h : d a t a T a b l e>

Rendu HTML :
1 2 3 4 5 6 7 8 9 10
< table id = " r e p o r t T a b l e" > < thead > < tr > < th > Daily Report </ th > </ tr > </ thead > < tbody > < tr > < td > Item 1 </ td > </ tr > < tr > < td > Item 2 </ td > </ tr > < tr > < td > Item 3 </ td > </ tr > </ tbody > </ table >

7.1.7

f :loadBundle

Le composant f :loadBundle permet de charger et initialiser un chier dinternationalisation en fonction de la locale de lutilisateur. Attributs :

basename var

le class path vers le chier properties. le nom de la variable que sera associ au Bundle. e

Exemple :
1 2
< f : l o a d B u n d l e basename = " com . m y c o m p a n y. M e s s a g e B u n d l e" var = " bundle " / > < h : o u t p u t T e x t value = " #{ bundle . w e l c o m e M e s s a g e} " / >

Rendu HTML :
1
Welcome to our site !

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

64/??

Les principaux composants JSF

7.1.8

f :param

Le composants f :param permet de spcier un attribut dun composant. Dans certains cas o` lon a beaucoup de e u param`tre il peut tre plus lisible dutiliser un f :param. Attributs : e e

binding id name value

Permet de spcier un backing bean sur lequel est mapp la proprit. e e ee Lid du composant. le nom du param`tre (le nom de lattribut du composant parent que lon souhaite spcier) e e La valeur du param`tre. e

Exemple :
1 2 3 4
< h : o u t p u t F o r m a t value = " Welcome , {0}. You have {1} new messages . " > < f:param value = " #{ userBean . user . f i r s t N a m e} " / > < f:param value = " #{ userBean . user . m e s s a g e C o u n t} " / > </ h : o u t p u t F o r m a t>

Rendu HTML :
1
Welcome , John . You have 12 new messages .

7.1.9

f :selectItem

Les selectItem sont des composants spciques pour les combo-box, radio boutons, etc... Ils permettent de spcier les e e dirents choix que proposent ces composants. Ils sont constitus de dirents attributs, comme le label, la valeur, si ils sont e e e slectionns, etc... e e Attributs : binding id itemDescription itemDisabled itemLabel itemValue value Exemple :
1 2 3 4
< h : s e l e c t O n e M e n u id = " list1 " > < f : s e l e c t I t e m i t e m L a b e l= " Option 1 " i t e m V a l u e= " 1 " > </ f : s e l e c t I t e m> < f : s e l e c t I t e m i t e m L a b e l= " Option 2 " i t e m V a l u e= " 2 " > </ f : s e l e c t I t e m> </ h : s e l e c t O n e M e n u>

Permet de spcier un backing bean sur lequel est mapp la proprit. e e ee Lid du selectItem. Permet de spcier une description. e Permet de spcier si loption est dactiv. e e e Le label de loption. La valeur de loption. Permet de spcier un Objet SelectItem dans un EJB. e

Rendu HTML :
1 2 3 4
< select id = " list1 " name = " list1 " size = " 1 " > < option value = " 1 " > Option 1 </ option > < option value = " 2 " > Option 2 </ option > </ select >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

65/??

Les principaux composants JSF

7.1.10

f :selectItems

Le composant f :selectItems sert ` la mme chose que le f :selectItem, ` la dirence pr`s quil prend une liste de a e a e e selectItem pour gnrer le rendu. e e Attributs :

binding id value

Permet de spcier un backing bean sur lequel est mapp la proprit. e e ee Lid du SelectItems. La valeur est une expresion EL pointant sur un EJB, plus spciquement sur un attribut de lEJB du type e List<SelectItem>.

Exemple :
1 2 3
< h : s e l e c t M a n y L i s t b o x id = " list " > < f : s e l e c t I t e m s value = " #{ o p t i o n B e a n. o p t i o n L i s t} " > </ f : s e l e c t I t e m> </ h : s e l e c t M a n y L i s t b o x>

Rendu HTML :
1 2 3 4 5
< select id = " list " name = " list " multiple = " true " > < option value = " 1 " > Option 1 </ option > < option value = " 2 " > Option 2 </ option > < option value = " 3 " > Option 3 </ option > </ select >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

66/??

Les principaux composants JSF

7.1.11

f :subview

Les f :subview permettent de dnir des conteneurs JSF. Cela permet de conditionner leurs achages. Il est ` noter e a que lid des f :view et f :subview prxe les champs dans les formulaires. Il est donc particuli`rement important de bien e e donner un nom ` leurs IDs, sous peine de se retrouver avec des IDs automatiques. a En JSF il est prfrable dviter dutiliser la JSTL, au lieu du c :if on utilise les f :subview. ee e Attributs :

binding id rendered

Permet de spcier un backing bean sur lequel est mapp la proprit. e e ee lid du composant expression EL permetant dacher ou non le composant

Exemple :
1 2 3 4 5
< f : s u b v i e w id = " bloc " rendered = " #{ true } " > < div id = " b l o c _ i n f o" > Hello the world </ div > </ f : s u b v i e w>

Rendu HTML :
1 2 3
< div id = " b l o c _ i n f o" > Hello the world </ div >

Exemple :
1 2 3 4 5
< f : s u b v i e w id = " bloc " rendered = " #{ false } " > < div id = " b l o c _ i n f o" > Hello the world </ div > </ f : s u b v i e w>

Rendu HTML :

7.1.12

f :validator

Comme pour les convertisseurs, JSF propose galement un lot de validateurs pour les formulaires. Cependant avec la e JSR-303 leurs utilisations sen retrouvent limites. e f f f f :validateDoubleRange :validateLength :validateLongRange :validator Permet la validation dun nombre dcimale dans un intervalle. e Permet la validation de la longueur dune cha de caract`re. ne e Permet la validation dun nombre entier dans un intervalle. Composant gnrique permettant linvocation dun validateur personnalis e e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

67/??

Les principaux composants JSF

7.1.13

f :valueChangeListener

Le composant f :valueChangeListener permet dajouter un listener sur un composant. Il appellera le listener au moment o` la valeur changera. Attributs : u type le nom complet de la classe servant de listener

Exemple :
1 2 3 4
< h : s e l e c t O n e M e n u id = " o p t i o n M e n u" value = " #{ o p t i o n B e a n. s e l e c t e d O p t i o n} " onchange = " submit () " > < f : s e l e c t I t e m s value = " #{ o p t i o n B e a n. o p t i o n L i s t} " / > < f : v a l u e C h a n g e L i s t e n e r type = " com . m y c o m p a n y. M y V a l u e C h a n g e L i s t e n e r I m p l" / > </ h : s e l e c t O n e M e n u>

Rendu HTML :
1 2 3 4 5
< select name = " f o r m : o p t i o n M e n u" size = " 1 " onchange = " submit () " > < option value = " 1 " > Option 1 </ option > < option value = " 2 " > Option 2 </ option > < option value = " 3 " > Option 3 </ option > </ select >

7.1.14

f :verbatim

Le composant f :verbatim permettait ` JSF1.1 de rsoudre certains probl`mes dachage. Cependant a e e le projet facelet a totalement corrig ce dfaut. Ce composant ne doit donc plus tre utilis. e e e e On retrouve malheureusement souvent ce composant. Il est gnralement utilis pour court-circuiter le parseur XHTML. e e e Exemple ` ne jamais faire : a
1 2 3
< f : v e r b a t i m> < br > </ f : v e r b a t i m>

Dans cette exemple le br nest pas valide en XHTML. Dans cette exemple cela nest pas bien grave, mais le composant verbatim permet dchapper la fermeture des balises. Cela peut provoquer des probl`mes de rendu assez complexe si on en e e abuse.

7.1.15

f :view

Le composant f :view est le principal composant de JSF, cest lui qui dnit le type de rendu de JSF. Il est extrmement e e important de bien le dnir. Mise ` part FireFox qui est capable de dtecter le mimetype rel du chier quil reoit, si le e a e e c mimetype dune page nest pas du text/html les autres navigateurs ne pourront pas excuter le code javascript. Cela est e particuli`rement vrais pour Chrome et Safari. e Attributs : id locale contentType lid principal de la vue JSF. Il est important de prciser car il prxera tous les champs e e des formulaires. permet de spcier une locale par dfaut ` la vue. e e a Cest lattribut le plus important, cest lui qui dnit le mimetype du rendu JSF. e JSF permet de produire nimporte quel type de rendu, que ce soit des pages web, chier SVG, email, etc... En gros nimporte quel type de format pouvant tre dnit e e en XML.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

68/??

Les principaux composants JSF

Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
< f:view xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " xmlns:ui = " http: // java . sun . com / jsf / facelets " c o n t e n t T y p e= " text / html " id = " #{ messages [ project . name ]} " >

< html > < h:head > < title > #{ messages [ project . name ]} </ title > </ h:head > < h:body id = " body " > < h1 > Hello the world </ h1 > </ h:body > </ html > </ f:view >

Rendu HTML :
1 2 3 4 5 6 7 8 9
< html > < h:head > < title > #{ messages [ project . name ]} </ title > </ h:head > < h:body id = " body " > < h1 > Hello the world < / h1 > </ h:body > </ html >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

69/??

Les principaux composants JSF

7.2

Les composants JSF html

Les composants HTML sont principalement destins ` la cration de formulaires ou pour les actions JSF. e a e

7.2.1

h :column

Le composant h :column permet de dnir une colonne dans un tableau. Il est gnralement combin avec le composant e e e e h :dataTable ou quivalent (rich :dataTable ou p :dataGrid ). e Attributs :

binding id rendered

permet de lis les attributs ` un bean. e a lid du composant. Expresion EL permetant dacher ou non le composant.

Exemple :
1 2 3 4 5
< h : d a t a T a b l e value = " #{ itemBean . items } " var = " item " > < h:column > < h : o u t p u t T e x t value = " #{ item } " > </ h : o u t p u t T e x t> </ h:column > </ h : d a t a T a b l e>

Rendu HTML :
1 2 3 4 5 6 7
< table > < tbody > < tr > < td > Item 1 </ td > </ tr > < tr > < td > Item 2 </ td > </ tr > < tr > < td > Item 3 </ td > </ tr > </ tbody > </ table >

Il est ` noter quen JSF on ne doit pas trouver de tableau HTML dnit ` la main. Si on en dnit a e a e un cest que lon cest tromp dans son implmentation. e e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

70/??

Les principaux composants JSF

7.2.2

h :commandButton

Le composant h :commandButton permet dexcuter une action depuis un bouton. Ce composant doit imprativement e e tre dans une formulaire JSF pour fonctionner (h :form, ou a :form 1 ). Il est ` noter que les h :commandButton sont rellement e a e des input html. Attributs : action actionListener alt binding disabled id image immediate rendered style styleClass Laction est une expression EL an dappeler une mthode dun EJB e Permet de dnir un listener qui interceptera les dirents vnements du bouton e e e e Permet dacher un texte alternatif. Identique ` la balise alt en HTML. a permet de lis les attributs ` un bean. e a Expression EL permettant de dactiver le bouton e lid du composant. Permet de spcier une image, soit via une URL relative ou absolut. e Permet de court-circuiter ltape de validation du cycle de vie JSF. e Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de grer manuellement lordre des composants lors que lon presse la touche tab, e cette attribut attend un entier de 0 ` 32767. a Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Le type peut tre soit submit ou reset. Par dfaut les boutons sont du type submit. e e Permet de dnir le text qui sera ach dans le bouton. e e

tabindex title type value

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

1. a :form est un composant dAjax4 JSF permettant davoir des formulaires en Ajax

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

71/??

Les principaux composants JSF

Exemple :
1 2 3
< h:commandButton id = " button1 " value = " #{ bundle . c h e c k o u t L a b e l} " action = " #{ s h o p p i n g C a r t B e a n. checkout } " / >

Rendu HTML :
1 2 3 4 5
< input id = " f o r m : b u t t o n 1" name = " f o r m : b u t t o n 1" type = " submit " value = " Check Out " onclick = " s o m e E v e n t() ; " / >

7.2.3

h :commandLink

Le composant h :commandLink est quivalent au h :commandButton. La dirence est quil utilise un lien html e e plutt quun input pour raliser son action. Comme pour le h :commandButton, le h :commandLink doit tre contenu o e e dans un formulaire. Attributs : action actionListener binding id immediate rel rendered rev style styleClass Laction est une expression EL an dappeler une mthode dun EJB e Permet de dnir un listener qui interceptera les dirents vnements du bouton e e e e permet de lis les attributs ` un bean. e a lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de grer manuellement lordre des composants lors que lon presse la touche tab, e cette attribut attend un entier de 0 ` 32767. a Identique ` son homologue HTML a Identique ` son homologue HTML a Permet de dnir le text qui sera ach dans le lien. e e

tabindex target title value

e Ev`nement JavaScript : onblur onkeypress onmousemove onmouseup onfocus onkeyup onmouseout onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

72/??

Les principaux composants JSF

Exemple :
1 2 3
< h : c o m m a n d L i n k id = " link1 " value = " #{ bundle . c h e c k o u t L a b e l} " action = " #{ s h o p p i n g C a r t B e a n. checkout } " / >

Rendu HTML :
1 2 3
<a href = " # " onclick = " s o m e E v e n t() ; " id = " f o r m : l i n k 1" > Check Out </ a >

7.2.4

h :dataTable

Le composant h :dataTable permet de raliser un tableau ` partir dune liste dojbet. e a Attributs : bgcolor binding border cellpadding cellspacing columnClasses rst footerClass headerClass id rendered rowClasses rows style styleClass Permet de dnir la couleur de fond du tableau e permet de lis les attributs ` un bean. e a Permet de spcier la taille des bordures en pixels e Permet de dnir la marge intrieur des cellules e e Permet de dnir la marge extrieur des cellules e e Permet de dnir une classe CSS pour les cellules e Permet de dnir ` partir de quel lement le tableau commence son itration. e a e e Permet de dnir une classe CSS pour le bas du tableau e Permet de dnir une classe CSS pour lentte du tableau e e lid du composant. Expresion EL permetant dacher ou non le composant. Permet de dnir une classe CSS pour les lignes du tableau e Permet de dnir le nombre de ligne que lon souhaite dans le tableau e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet dassocier une description au tableau. Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Expression EL permettant de lie une liste contenu dans un EJB et le composant e Nom de lobjet de litration courante e Permet de dnir la largeur du composant. e

summary title value var width

e Ev`nement JavaScript : onclick onkeypress onmousemove onmouseup ondblclick onkeyup onmouseout onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

73/??

Les principaux composants JSF

Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
< h : d a t a T a b l e id = " table1 " value = " #{ s h o p p i n g C a r t B e a n. items } " var = " item " > < f:facet name = " header " > < h : o u t p u t T e x t value = " Your Shopping Cart " / > </ f:facet > < h:column > < f:facet name = " header " > < h : o u t p u t T e x t value = " Item D e s c r i p t i o n" / > </ f:facet > < h : o u t p u t T e x t value = " #{ item . d e s c r i p t i o n} " / > </ h:column > < h:column > < f:facet name = " header " > < h : o u t p u t T e x t value = " Price " / > </ f:facet > < h : o u t p u t T e x t value = " #{ item . price } " / > </ h:column > < f:facet name = " footer " > < h : o u t p u t T e x t value = " Total: #{ s h o p p i n g C a r t B e a n. total } " / > </ f:facet > </ h : d a t a T a b l e>

Rendu HTML :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
< table id = " table1 " > < thead > < tr > < th scope = " colgroup " colspan = " 2 " > Your Shopping Cart </ th > </ tr > < tr > < th > Item D e s c r i p t i o n</ th > < th > Price </ th > </ tr > </ thead > < tbody > < tr > < td > D e l i c i o u s Apple < / td > < td > 5.00 </ td > </ tr > < tr > < td > Juicy Orange </ td > < td > 5.00 </ td > </ tr > < tr > < td > Tasty Melon </ td > < td > 5.00 </ td > </ tr > </ tbody > < tfoot > < tr > < td colspan = " 2 " > Total: 15.00 </ td > </ tr > </ tfoot > </ table >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

74/??

Les principaux composants JSF

7.2.5

h :form

JSF a besoin du composant h :form dans deux cas : lon souhaite avoir des actions sur la page (pour les commandButton et commandLink ) Ou lorsque lon a un formulaire sur la page. Dans les premi`res version de JSF, on ne pouvait faire que des actions par le protocole http POST. Depuis Seam 2.x il e est possible deectuer des actions en GET ainsi que dappeler des methodes java en REST. Il est ` noter que le composant h :form ` un quivalent Ajax qui est le a :form contenu dans AjaxForJSF. a a e

Attributs : binding enctype id rendered style styleClass permet de lis les attributs ` un bean. e a Permet de spcier lencodage du formulaire, par dfaut lencodage est application/x-wwwe e form-urlencoded lid du composant. Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a

title

e Ev`nement JavaScript : onclick onkeypress onmousemove onmouseup Exemple :


1 2 3 4 5 6 7 8 9 10 11 12 13
< h:form id = " form " > < h : s e l e c t O n e M e n u id = " s u b s c r i p t i o n s" value = " #{ home . t e c h n o S e l e c t e d} " > < f : s e l e c t I t e m s value = " #{ home . r e f e r e n c e s D a t a s. technos } " / > </ h : s e l e c t O n e M e n u> < h : c o m m a n d B u t t o n id = " submit " value = " Select it ! " action = " #{ home . select } " / > </ h:form >

ondblclick onkeyup onmouseout onreset

onkeydown onmousedown onmouseover onsubmit

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

75/??

Les principaux composants JSF

Rendu HTML :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
< form id = " form " name = " form " method = " post " action = " / smile - seam / " enctype = " a p p l i c a t i o n/ x - www - form - u r l e n c o d e d" > < input name = " form " value = " form " type = " hidden " / > < select id = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s" size =" 1 " > < option value = " py " > Python </ option > < option value = " c " >C / C ++ </ option > < option value = " jee " > JEE </ option > < option value = " sh " > Shell </ option > < / select > < input style = " margin - left: 50 px ; " id = " f o r m : s u b m i t" name = " f o r m : s u b m i t" value = " button " type = " submit " / > < input name = " javax . faces . V i e w S t a t e" id = " javax . faces . V i e w S t a t e" value = " - 7 0 0 7 0 5 3 8 6 5 0 2 93 26 33 7: 9 1 3 0 1 5 0 0 4 5 6 3 1 2 0 8 5 4 9" a u t o c o m p l e t e= " off " type = " hidden " / > </ form >

7.2.6

h :graphicImage

Le composant graphicImage est lquivalent HTML img. Etant un composant JSF il hrite de certaines attributs e e comme le rendered permettant de masquer limage grce ` un bean. Bien quavec facelets il est possible dutilise des balises a a HTMl, Il est prfrable dutiliser des composants JSF. Pour rappel JSF fonctionne sur le principe dun arbre de composants, ee cela permet galement de manipuler plus facilement les divers lments constituant notre page JSF. e ee Attributs : id binding ismap lang longdesc rendered url usemap value alt title style styleClass lid du composant. permet de lis les attributs ` un bean. e a Permet de dnir si limage est une Image Map cot serveur. e e Permet de dnire la locale du composant. identique ` son homologue HTML e a Expresion EL permetant dacher ou non le composant. Cet attribut est un alias de lattribut value Permet de dnir le nom de limage Map cot client. e e Permet de dnir lemplacement de limage. Le lien est relatif au dossier webapp du WAR . e Permet dacher un texte alternatif. Identique ` la balise alt en HTML. a Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnir la hauteur du composant. e Permet de dnir la largeur du composant. e

height width

e Ev`nement JavaScript : onclick onkeypress onmousemove onmouseup ondblclick onkeyup onmouseout onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

76/??

Les principaux composants JSF

Exemple :
1
< h : g r a p h i c I m a g e id = " image1 " value = " / images / header . gif " width = " 400 " height = " 150 " / >

Rendu HTML :
1
< img id = " image1 " src = " / images / header . gif " width =" 400 " height = " 150 " / >

7.2.7

h :inputHidden

An de pouvoir lier un objet java ` un formulaire, JSF a besoin de composants spcique. Le h :inputHidden permet a e davoir un quivalent ` linput hidden que lon retrouve en HTML. e a Attributs : binding converter id immediate rendered required validator value valueChangeListener Exemple :
1
< h : i n p u t H i d d e n id = " hidden1 " value = " #{ myBean . h i d d e n V a l u e} " / >

permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur

Rendu HTML :
1
< input id = " f o r m : h i d d e n 1" name = " f o r m : h i d d e n 1" type = " hidden " value = " Hidden Value " / >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

77/??

Les principaux composants JSF

7.2.8

h :inputSecret

Comme en HTML le h :inputSecret permet la saisie de mot de passe. Attributs : accesskey alt binding converter disabled id immediate lang maxlength readonly redisplay rendered required size style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. Permet dacher un texte alternatif. Identique ` la balise alt en HTML. a permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de dnir la taille maximal de la valeur du composant. e Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Permet de dnir si JSF doit acher la valeur du composant apr`s le rafraichissement de la e e page. Par scurit le redisplay est dactiv par dfaut (false) . e e e e e Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Dnit la taille du composant en nombre de caract`res. e e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur JSF permet dassocier un listener sur des champs dun formulaire pour eectuer des traitement spcique lorsque ces deniers changent. La mthode dcoute du listener doit e e e imprativement tre une mthode public avec comme param`tre un objet du type Vale e e e ueChangeEvent. Cette mthode doit galement ne rien retourner (void) e e

title validator value valueChangeListener

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

78/??

Les principaux composants JSF

Exemple :
1
< h : i n p u t S e c r e t id = " password " value = " #{ userBean . user . password } " / >

Rendu HTML :
1
< input id = " f o r m : p a s s w o r d" name = " f o r m : p a s s w o r d" type = " password " / > Value " / >

7.2.9

h :inputText

Le composant h :inputText permet la saisie de text dans un formulaire JSF. Attributs : accesskey alt binding converter disabled id immediate lang maxlength readonly rendered required size style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. Permet dacher un texte alternatif. Identique ` la balise alt en HTML. a permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de dnir la taille maximal de la valeur du composant. e Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Dnit la taille du composant en nombre de caract`res. e e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur JSF permet dassocier un listener sur des champs dun formulaire pour eectuer des traitement spcique lorsque ces deniers changent. La mthode dcoute du listener doit e e e imprativement tre une mthode public avec comme param`tre un objet du type Vale e e e ueChangeEvent. Cette mthode doit galement ne rien retourner (void) e e

title validator value valueChangeListener

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

79/??

Les principaux composants JSF

Exemple :
1
< h : i n p u t T e x t id = " username " value = " #{ userBean . user . username } " / >

Rendu HTML :
1
< input id = " f o r m : u s e r n a m e" name = " f o r m : u s e r n a m e" type = " text " / >

7.2.10

h :inputTextarea

Le composant h :inputTextarea permet la saisie des zone text dans un formulaire JSF. Attributs : accesskey binding cols converter disabled id immediate lang readonly rendered required rows style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a Permet de dnir le nombre de colonnes du text aera. e Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Permet de dnir le nombre de lignes du text aera. e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur JSF permet dassocier un listener sur des champs dun formulaire pour eectuer des traitement spcique lorsque ces deniers changent. La mthode dcoute du listener doit e e e imprativement tre une mthode public avec comme param`tre un objet du type Vale e e e ueChangeEvent. Cette mthode doit galement ne rien retourner (void) e e

title validator value valueChangeListener

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

80/??

Les principaux composants JSF

Exemple :
1
< h : i n p u t T e x t a r e a id = " comments " value = " #{ s u r v e y B e a n. question [1]. comments } " / >

Rendu HTML :
1
< textarea name = " f o r m : c o m m e n t s" id = " f o r m : c o m m e n t s" > </ textarea >

7.2.11

h :messages

Le composant h :messages permet dacher de messages derreurs ou dinformation. JSF permet du cot serveur e denvoyer des messages via le FacesMessages. Ces messages ont dirents niveaux : e info warn error fatal JBoss Seam apporte un composant permettant de simplier lutilisation des FacesMessages. Ce composant Messages (org.jboss.seam.international.status.Messages) est injectable dans un EJB par annotation. Attributs : binding globalOnly id layout rendered showDetail showSummary style styleClass permet de lis les attributs ` un bean. e a Permet de dnir si le composant doit acher uniquement les messages globaux. e lid du composant. Par dfaut en mode list, cet attribut permet de dnir la faon dont les messages sont e e c achs. Il peut avoir deux valeur soit list ou table e Expresion EL permetant dacher ou non le composant. Par dfaut ` vrais, cet attribut permet de dactiver lachage le dtail des messages e a e e Par dfaut ` faux, cet attribut permet dactiver uniquement lachage du rsum des mese a e e sages. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dacher les messages derreurs via des infos-bulles. Permet de dnir la classe CSS pour les messages du niveau info e Permet de dnir un style CSS spcique aux messages de niveau info e e Permet de dnir la classe CSS pour les messages du niveau warn e Permet de dnir un style CSS spcique aux messages de niveau warn e e Permet de dnir la classe CSS pour les messages du niveau erreur e Permet de dnir un style CSS spcique aux messages de niveau erreur e e Permet de dnir la classe CSS pour les messages du niveau fatale e Permet de dnir un style CSS spcique aux messages de niveau fatale e e

title tooltip infoClass infoStyle warnClass warnStyle errorClass errorStyle fatalClass fatalStyle

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

81/??

Les principaux composants JSF

7.2.11.1
1 2 3 4 5 6

Exemple dans lutilisation de formulaire :

< h:form id = " form " > < h : i n p u t T e x t id = " username " required = " #{ true } " value = " #{ userBean . user . username } " / > < br / > < h : i n p u t S e c r e t id = " password " required = " #{ true } " value = " #{ userBean . user . password } " / > < br / > < h : c o m m a n d B u t t o n id = " submit " / > < br / > < h : m e s s a g e s s h o w D e t a i l= " #{ true } " s h o w S u m m a r y= " #{ false } " / > </ h:form >

Rendu HTML :
1 2 3 4 5 6 7 8 9
< form id = " form " name = " form " method = " post " action = " / demo / messages . jsp " enctype = " a p p l i c a t i o n/x - www - form - u r l e n c o d e d" > < input id = " f o r m : u s e r n a m e" name = " f o r m : u s e r n a m e" type = " text " value = " " / > < br / > < input id = " f o r m : p a s s w o r d" name = " f o r m : p a s s w o r d" type = " password " / > < br / > < input id = " f o r m : s u b m i t" name = " f o r m : s u b m i t" type = " submit " onclick = " g e n e r a t e d C o d e() ; " / > < br / > < ul > < li >" username " : Value is required . </ li > < li >" password " : Value is required . </ li > </ ul > </ form >

7.2.11.2
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

Exemple dans lutilisation du cot serveur : e

package fr . smile . seam . core . actions . home ; import import import import import import import java . io . S e r i a l i z a b l e; javax . e n t e r p r i s e. context . S e s s i o n S c o p e d; javax . inject . Inject ; javax . inject . Named ; org . jboss . seam . i n t e r n a t i o n a l. status . Messages ; org . jboss . seam . solder . logging . Logger ; fr . smile . seam . core . services . R e f e r e n c e s D a t a s;

/ C o nt r o l l e r o f home page . / @SessionScoped @Named public class Home i m p l e m e n t s S e r i a l i z a b l e { // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================================== // ATTRIBUTS // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================================== / The Constant serialVersionUID . / private static final long s e r i a l V e r s i o n U I D = - 4 7 4 6 6 7 3 0 4 1 3 63 46 90 36L ; / The l o g . / @Inject private Logger log ; @Inject Messages messages ; @Inject private R e f e r e n c e s D a t a s r e f e r e n c e s D a t a s; private String t e c h n o S e l e c t e d; // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================================== // METHODS // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================================== public void select () { log . info ( t e c h n o S e l e c t e d) ; messages . error ( " faild !!! " ) ; } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================================== // GETTERS & SETTERS // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ==================================== // . . . . . . . }

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

82/??

Les principaux composants JSF

On peut noter que lEJB Messages se comporte un peu comme un logger. Il est galement capable de formater des e chanes de caract`res ou rcuprer des messages depuis un chier properties. e e e Template JSF :
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
<! DOCTYPE c o m p o s i t i o n PUBLIC " -// W3C // DTD XHTML 1.0 T r a n s i t i o n a l// EN " " http: // www . w3 . org / TR / xhtml1 / DTD / xhtml1 - t r a n s i t i o n a l. dtd " > < u i : c o m p o s i t i o n xmlns = " http: // www . w3 . org /1999/ xhtml " xmlns:s = " http: // jboss . com / products / seam / taglib " xmlns:ui = " http: // java . sun . com / jsf / facelets " xmlns:f = " http: // java . sun . com / jsf / core " xmlns:h = " http: // java . sun . com / jsf / html " x m l n s : r i c h= " http: // r i c h f a c e s. org / rich " xmlns:p = " http: // p r i m e f a c e s. prime . com . tr / ui " template = " layout / template . xhtml " >

< u i : r e m o v e> <! TITLE > </ u i : r e m o v e> < u i : d e f i n e name = " title " > Welcome to Seam ! </ u i : d e f i n e>

< u i : r e m o v e> <! BODY > </ u i : r e m o v e> < u i : d e f i n e name = " body " > < f : s u b v i e w rendered = " #{ s h o w G l o b a l M e s s a g e s != false } " id = " e r r o r s M e s s a g e s A e r a" > < div id = " e r r o r s M e s s a g e s" > < h : m e s s a g e s id = " messages " g l o b a l O n l y= " true " s t y l e C l a s s= " message " e r r o r C l a s s= " errormsg " i n f o C l a s s= " infomsg " w a r n C l a s s= " warnmsg " / > </ div > </ f : s u b v i e w > < r i c h : p a n e l id = " panel " header = " This is the panel header " > < div id = " v a l u e _ s e l e c t e d" > < h2 id = " value " > Selected techno : #{ home . t e c h n o S e l e c t e d} </ h2 > </ div > < div id = " f o r m _ c o n t e n t" > < h:form id = " form " > < h : s e l e c t O n e M e n u id = " s u b s c r i p t i o n s" value = " #{ home . t e c h n o S e l e c t e d} " > < f : s e l e c t I t e m s value = " #{ home . r e f e r e n c e s D a t a s. technos } " / > </ h : s e l e c t O n e M e n u> < h : c o m m a n d B u t t o n id = " submit " value = " Select it ! " action = " #{ home . select } " / > </ h:form > </ div > </ r i c h : p a n e l> </ u i : d e f i n e> </ u i : c o m p o s i t i o n>

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

83/??

Les principaux composants JSF

Rendu HTML :

Figure 7.1 rendu du h :messages

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

84/??

Les principaux composants JSF

7.2.12

h :message

Tout comme le composant h :messages , le composant h :message permet dacher des messages en provenance du serveur. Cependant celui-ci est spcique ` un champs dun formulaire. Typiquement limplmentation de la JSR-303 dans e a e Seam se repose sur ce composant pour acher les messsages gnrs par Hibernate Validator. e e e Attributs : binding for id showDetail showSummary rendered style styleClass permet de lis les attributs ` un bean. e a Cet attribut est obligatoire. Il sert ` dnir lid du champs pour le quel le h :message doit a e acher les messages. lid du composant. Par dfaut ` vrais, cet attribut permet de dactiver lachage le dtail du message. e a e e Par dfaut ` faux, cet attribut permet dactiver uniquement lachage du rsum du mese a e e sage. Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dacher le messages derreur via une info-bulle. Permet de dnir la classe CSS pour les messages du niveau info e Permet de dnir un style CSS spcique aux messages de niveau info e e Permet de dnir la classe CSS pour les messages du niveau warn e Permet de dnir un style CSS spcique aux messages de niveau warn e e Permet de dnir la classe CSS pour les messages du niveau erreur e Permet de dnir un style CSS spcique aux messages de niveau erreur e e Permet de dnir la classe CSS pour les messages du niveau fatale e Permet de dnir un style CSS spcique aux messages de niveau fatale e e

title tooltip infoClass infoStyle warnClass warnStyle errorClass errorStyle fatalClass fatalStyle Exemple :
1

< h : i n p u t T e x t id = " username " value = " #{ userBean . user . username } " / >

Rendu HTML :
1
< input id = " f o r m : u s e r n a m e" name = " f o r m : u s e r n a m e" type = " text " / >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

85/??

Les principaux composants JSF

7.2.13

h :outputFormat

Le composant h :outputFormat permet de formater une cha de caract`res avec des variables. ne e Attributs : binding converter escape id rendered style styleClass permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de convertir des caract`res de la syntaxe HTML en HTML entities. (exemple < e deviendra &lt ; ) lid du composant. Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur

title value

Exemple :
1 2 3 4
< h : o u t p u t F o r m a t value = " Welcome , {0}. You have {1} new messages . " > < f:param value = " #{ userBean . user . f i r s t N a m e} " / > < f:param value = " #{ userBean . user . m e s s a g e C o u n t} " / > </ h : o u t p u t F o r m a t>

Rendu HTML :
1
Welcome , John . You have 12 new messages .

7.2.14

h :outputLabel

Le composant h :outputLabel est lquivalent JSF du label HTML. Comme ce dernier il permet de lier un text et un e champs dun formulaire. Attributs : accesskey binding converter for id lang rendered style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de dnir lid du champs au quel le label est li. e e lid du composant. Permet de dnire la locale du composant. identique ` son homologue HTML e a Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet de dnir le text qui sera ach dans le label. e e

title value

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

86/??

Les principaux composants JSF

e Ev`nement JavaScript : onblur onfocus onkeyup onmouseout Exemple :


1 2 3 4
< h : p a n e l G r o u p> < h : o u t p u t L a b e l id = " u s e r n a m e L a b e l" for = " username " value = " #{ bundle . u s e r n a m e L a b e l} " / > < h : i n p u t T e x t id = " username " value = " #{ userBean . user . username }} " / > < h : p a n e l G r o u p>

onclick onkeydown onmousedown onmouseover

ondblclick onkeypress onmousemove onmouseup

Rendu HTML :
1 2
< label id = " f o r m : u s e r n a m e L a b e l" for = " f o r m : u s e r n a m e" > Username </ label > < input id = " f o r m : u s e r n a m e" name = " f o r m : u s e r n a m e" type = " text " value = " " / >

7.2.15

h :outputLink

Lh :outputLink permet de gnrer un lien hypertext en simpliant lcriture des divers param`tres que lon souhaite e e e e ajouter au lien. Attributs : accesskey binding converter coords hreang id lang rendered style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de dnir les coordonnes sur une image Map e e Permet de dnir la locale de la page vers la quel le lien pointe. e lid du composant. Permet de dnire la locale du composant. identique ` son homologue HTML e a Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e identique ` son quivalent html, cet attribut permet de spcier si on doit ouvrir le lien dans a e e une nouvelle fentre. e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a le label du lien

target title value

e Ev`nement JavaScript : onblur onfocus onkeyup onmouseout onclick onkeydown onmousedown onmouseover ondblclick onkeypress onmousemove onmouseup

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

87/??

Les principaux composants JSF

Exemple :
1 2 3 4 5
< h : o u t p u t L i n k id = " link1 " value = " http: // www . y o u r c o m p a n y. com " > < f:param name = " p r o j e c t I d" value = " 123 " / > < f:param name = " userId " value = " 45 " / > < h : o u t p u t T e x t value = " Open Project " / > </ h : o u t p u t L i n k>

Rendu HTML :
1
<a href = " http: // www . y o u r c o m p a n y. com ? p r o j e c t I d=123& userId =45 " id = " link1 " > Open Project </ a >

7.2.16

h :outputText

Bien quon ne soit pas oblig dutiliser le composant h :outputText pour acher une variable, il est tout mme e e prfrable de lutiliser. Ce composant a pour eet dencapsuler la variable dans un span. ee
1
< h : o u t p u t T e x t value = " #{ bundle . w e l c o m e M e s s a g e} " style = " font - w e i g h t : b o l d" / >

Rendu HTML :
1
< span style = " font - w e i g h t : b o l d" > Welcome to our site ! </ span >

Attributs : binding converter escape id rendered style styleClass permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. permet dchaper les caract`res spcique ` la syntaxe html pour les convertir en HTML e e e a entities. lid du composant. Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a la valeur que lon souhaite acher.

title value

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

88/??

Les principaux composants JSF

7.2.17

h :panelGrid

Ce composant est tr`s important et souvent ignor de beaucoup de dveloppeurs. Lune des erreur classique des dbutant e e e e en JSF est de cre des tableaux HTML ` la main. Cela cre du code incomprhensible et dicilement maintenable. JSF e a e e propose une solution lgante pour cre des tableaux, il faut donc au maximum utiliser le h :panelGrid. ee e Rendu HTML :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< h : p a n e l G r i d id = " panel " columns = " 2 " border = " 1 " > < f:facet name = " header " > < h : o u t p u t T e x t value = " #{ bundle . s i g n I n M e s s a g e} " / > </ f:facet > < h : o u t p u t L a b e l for = " username " value = " #{ bundle . u s e r n a m e L a b e l} " / > < h : i n p u t T e x t id = " username " value = " #{ userBean . user . username } " / > < h : o u t p u t L a b e l for = " password " value = " #{ bundle . p a s s w o r d L a b e l} " / > < h : i n p u t T e x t id = " password " value = " #{ userBean . user . password } " / > < f:facet name = " footer " > < h : p a n e l G r o u p style = " d i s p l a y : b l o c k; text - a l i g n : c e n t e r" > < h : c o m m a n d B u t t o n id = " submit " value = " #{ bundle . s u b m i t L a b e l} " / > </ h : p a n e l G r o u p> </ f:facet > </ h : p a n e l G r i d>

Rendu HTML :
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40
< table id = " f o r m : p a n e l" border = " 1 " > < thead > < tr > < th scope = " colgroup " colspan = " 2 " > Please sign in </ th > </ tr > </ thead > < tbody > < tr > < td > < label </ td > < td > < input </ td > </ tr > < tr > < td > < label </ td > < td > < input </ td > </ tr > </ tbody > < tfoot > < tr > < td colspan = " 2 " > < span style = " d i s p l a y : b l o c k; text - a l i g n : c e n t e r" > < input id = " f o r m : s u b m i t" name = " f o r m : s u b m i t" type = " submit " value = " Submit " onclick = " c l e a r _ f o r m() ; " / > </ span > </ td > </ tr > </ tfoot > </ table > for = " f o r m : u s e r n a m e" > Username </ label >

id = " f o r m : u s e r n a m e" name = " f o r m : u s e r n a m e" type =" text " value = " " / >

for = " f o r m : p a s s w o r d" > Password </ label >

id = " f o r m : p a s s w o r d" name = " f o r m : p a s s w o r d" type =" text " value = " " / >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

89/??

Les principaux composants JSF

On remarque que le code JSF est beaucoup plus simple. Suivant le nombre de colonnes dnit dans lattribut columns il e va placer automatiquement les composants JSF dans les bonnes cellules. Cependant pour que cela fonctionne il faut avoir des composants JSF ` lintrieur du h :panelGrid. Certains composants JSF permettent dencapsuler du code HTML (comme a e les h :panelGroup). On retrouve ce composant principalement dans les formulaires, an de mettre en page dun cot les labels et de lautre e les champs. Attributs : bgcolor binding border cellpadding cellspacing columnClasses columns footerClass headerClass id lang rendered rowClasses style styleClass Permet de dnir la couleur du tableau. e permet de lis les attributs ` un bean. e a Permet de dnir la taille des bordures du tableau e Permet de dnir la marge intrieur des cellules e e Permet de dnir lespacement entre deux cellules e Permet de dnir les classes CSS des colonnes. Les classes doivent tre spares par des e e e e virgules. Permet de dnir le nombre de colonnes du tableau e Permet de dnir la classe CSS pour le footer du tableau e Permet de dnir la classe de lentte du tableau e e lid du composant. Permet de dnire la locale du composant. identique ` son homologue HTML e a Expresion EL permetant dacher ou non le composant. Permet de dnir une classe CSS pour les lignes du tableau e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de donner une description du tableau pour un meilleur rfrencement. ee Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet de dnir la largeur du composant. e

summary title width

e Ev`nement JavaScript : onclick onkeypress onmousemove onmouseup ondblclick onkeyup onmouseout onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

90/??

Les principaux composants JSF

7.2.18

h :panelGroup

Le composant h :panelGroup est un conteneur de composants. Il est principalement utilis avec le h :panelGrid. e Exemple :
1 2 3 4 5 6 7 8
< h:form id = " form " > < h : p a n e l G r i d id = " grid " columns = " 1 " > < h : p a n e l G r o u p> < h : i n p u t T e x t id = " username " value = " #{ userBean . user . username } " required = " #{ true } " / > < h : m e s s a g e for = " username " / > </ h : p a n e l G r o u p> </ h : p a n e l G r i d> </ h:form >

Rendu HTML :
1 2 3 4 5 6 7 8 9 10 11 12
< form id = " form " name = " form " method = " post " ... > < table id = " grid " > < tbody > < tr > < td > < input id = " username " name = " username " type = " text " value = " " / > " username " : Value is required . </ td > </ tr > </ tbody > </ table > </ form >

Attributs : binding id rendered style styleClass permet de lis les attributs ` un bean. e a lid du composant. Expresion EL permetant dacher ou non le composant. Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

91/??

Les principaux composants JSF

7.2.19

h :selectBooleanCheckbox

Le composant h :selectBooleanCheckbox permet de gnrer un case ` cocher. e e a Exemple :


1
< h : s e l e c t B o o l e a n C h e c k b o x id = " remember " value = " #{ userBean . user . remember } " / >

Rendu HTML :
1
< input type = " checkbox " id = " f o r m : r e m e m b e r" name = " f o r m : r e m e m b e r" value = " true " / >

Attributs : accesskey binding converter disabled id immediate lang readonly rendered required style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur JSF permet dassocier un listener sur des champs dun formulaire pour eectuer des traitement spcique lorsque ces deniers changent. La mthode dcoute du listener doit e e e imprativement tre une mthode public avec comme param`tre un objet du type Vale e e e ueChangeEvent. Cette mthode doit galement ne rien retourner (void) e e

title validator value valueChangeListener

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

92/??

Les principaux composants JSF

7.2.20

h :selectManyCheckbox

Comme le h :selectBooleanCheckbox, le composant h :selectManyCheckbox permet de gnrer des cases ` cocher, e e a mais ` choix multiple. Pour cela le h :selectManyCheckbox aura besoin de plusieurs f :selectItem, ou dun f :selectItems pour a construire les dirents choix. e Exemple :
1 2 3 4 5 6 7 8 9 10 11
< h : s e l e c t M a n y C h e c k b o x id = " s u b s c r i p t i o n s" value = " #{ s u b s c r i b e r B e a n. s u b s c r i p t i o n s} " layout = " p a g e D i r e c t i o n" > < f:selectItem < f:selectItem < f:selectItem < f:selectItem < f:selectItem id = " item1 " id = " item2 " id = " item3 " id = " item4 " id = " item5 " i t e m L a b e l= " News " i t e m V a l u e= " 1 " / > i t e m L a b e l= " Sports " i t e m V a l u e= " 2 " / > i t e m L a b e l= " Music " i t e m V a l u e= " 3 " / > i t e m L a b e l= " Java " i t e m V a l u e= " 4 " / > i t e m L a b e l= " Web " i t e m V a l u e= " 5 " / >

</ h : s e l e c t M a n y C h e c k b o x>

Rendu HTML :
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
< table > < tr > < td > < label > < input type = " checkbox " name = " f o r m : i t e m 1" value = " 1 " / > News </ label > </ td > </ tr > < tr > < td > < label > < input type = " checkbox " name = " f o r m : i t e m 2" value = " 2 " / > Sports </ label > </ td > </ tr > < tr > < td > < label > < input type = " checkbox " name = " f o r m : i t e m 3" value = " 3 " / > Music </ label > </ td > </ tr > < tr > < td > < label > < input type = " checkbox " name = " f o r m : i t e m 4" value = " 4 " / > Java </ label > </ td > </ tr > < tr > < td > < label > < input type = " checkbox " name = " f o r m : i t e m 5" value = " 5 " / > Web </ label > </ td > </ tr > </ table >

Attributs :

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

93/??

Les principaux composants JSF

accesskey binding border converter disabled disabledClass enabledClass id immediate lang layout

readonly rendered required style styleClass

title validator value valueChangeListener

est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a ce composant sencapsule dans un tableau, cet attribut permet de dnir la taille de sa e bordure. Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e Permet de dnir une classe CSS pour ltat dcoch des choix e e e e Permet de dnir une classe CSS pour ltat coch des choix e e e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de spcier dans quel sens sont gnrs les check-box, par dfaut elles sont horizone e e e e tales. Cet attribut accepte comme param`tre lineDirection (horizontale) , ou soit pageDie rection ( verticale ). Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur JSF permet dassocier un listener sur des champs dun formulaire pour eectuer des traitement spcique lorsque ces deniers changent. La mthode dcoute du listener doit e e e imprativement tre une mthode public avec comme param`tre un objet du type Vale e e e ueChangeEvent. Cette mthode doit galement ne rien retourner (void) e e

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

94/??

Les principaux composants JSF

7.2.21

h :selectManyListbox

Ce composant permet de gnrer une liste droulante en JSF. Pour la gnration de cette liste, le composant a besoin e e e e e de selectItem (ou selectIems). Exemple :
1 2 3 4 5 6 7
< h : s e l e c t M a n y L i s t b o x id = " s u b s c r i p t i o n s" value = " #{ s u b s c r i b e r B e a n. s u b s c r i p t i o n s} " > < f : s e l e c t I t e m id = " item1 " i t e m L a b e l= " News " i t e m V a l u e= " 1 " / > < f : s e l e c t I t e m id = " item2 " i t e m L a b e l= " Sports " i t e m V a l u e= " 2 " / > < f : s e l e c t I t e m id = " item3 " i t e m L a b e l= " Music " i t e m V a l u e= " 3 " / > < f : s e l e c t I t e m id = " item4 " i t e m L a b e l= " Java " i t e m V a l u e= " 4 " / > < f : s e l e c t I t e m id = " item5 " i t e m L a b e l= " Web " i t e m V a l u e= " 5 " / > </ h : s e l e c t M a n y L i s t b o x>

Rendu HTML :
1 2 3 4 5 6 7
< select name = " f o r m : s u b s c r i p t i o n s" multiple = " true " size = " -2147483648 " > < option value = " 1 " > News </ option > < option value = " 2 " > Sports < / option > < option value = " 3 " > Music </ option > < option value = " 4 " > Java </ option > < option value = " 5 " > Web </ option > </ select >

Attributs : accesskey binding converter disabled disabledClass enabledClass id immediate lang readonly rendered required size style styleClass est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e Permet de dnir une classe CSS pour les choix dactivs e e e Permet de dnir une classe CSS pour les choix actifs e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Permet de dnir la taille en caract`re de la liste droulante. e e e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Les composants JSF sont ` lorigine des classes Java, il ne peut donc pas avoir dattribut a class. cest pour cela que les composants JSF utilise lattribut styleClass, mais qui remplit exactement la mme tache que son homologue HTML e Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur

title validator value

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

95/??

Les principaux composants JSF

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

7.2.22

h :selectOneListbox

Ce composant est identique au h :selectManyListbox, mais ne permet de slectionner quune seule valeur. e Exemple :
1 2 3 4 5 6 7
< h : s e l e c t O n e L i s t b o x id = " s u b s c r i p t i o n s" value = " #{ s u b s c r i b e r B e a n. s u b s c r i p t i o n s} " > < f : s e l e c t I t e m id = " item1 " i t e m L a b e l= " News " i t e m V a l u e= " 1 " / > < f : s e l e c t I t e m id = " item2 " i t e m L a b e l= " Sports " i t e m V a l u e= " 2 " / > < f : s e l e c t I t e m id = " item3 " i t e m L a b e l= " Music " i t e m V a l u e= " 3 " / > < f : s e l e c t I t e m id = " item4 " i t e m L a b e l= " Java " i t e m V a l u e= " 4 " / > < f : s e l e c t I t e m id = " item5 " i t e m L a b e l= " Web " i t e m V a l u e= " 5 " / > </ h : s e l e c t O n e L i s t b o x>

Rendu HTML :
1 2 3 4 5 6 7
< select id = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s" size = " 5 " > < option value = " 1 " > News </ option > < option value = " 2 " > Sports < / option > < option value = " 3 " > Music </ option > < option value = " 4 " > Java </ option > < option value = " 5 " > Web </ option > </ select >

7.2.23

h :selectManyMenu

Ce composant est identique au h :selectManyListbox ` la dirence prs que le h :selectManyMenu na pas a e e dattribut size. Il faut aussi faire attention car ce composant a un rendu dirent suivant les navigateurs (Internet Explorer e sans le citer ... ) Exemple :
1 2 3 4 5 6 7
< h : s e l e c t M a n y M e n u id = " s u b s c r i p t i o n s" value = " #{ s u b s c r i b e r B e a n. s u b s c r i p t i o n s} " > < f : s e l e c t I t e m id = " item1 " i t e m L a b e l= " News " i t e m V a l u e= " 1 " / > < f : s e l e c t I t e m id = " item2 " i t e m L a b e l= " Sports " i t e m V a l u e= " 2 " / > < f : s e l e c t I t e m id = " item3 " i t e m L a b e l= " Music " i t e m V a l u e= " 3 " / > < f : s e l e c t I t e m id = " item4 " i t e m L a b e l= " Java " i t e m V a l u e= " 4 " / > < f : s e l e c t I t e m id = " item5 " i t e m L a b e l= " Web " i t e m V a l u e= " 5 " / > </ h : s e l e c t M a n y M e n u>

Rendu HTML :
1 2 3 4 5 6 7
< select id = " f o r m : m e n u" name = " f o r m : m e n u" multiple = " true " size = " 1 " > < option value = " 1 " > News </ option > < option value = " 2 " > Sports < / option > < option value = " 3 " > Music </ option > < option value = " 4 " > Java </ option > < option value = " 5 " > Web </ option > </ select >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

96/??

Les principaux composants JSF

7.2.24

h :selectOneMenu

Ce composant est identique au h :selectManyMenu, mais en permettant de slectionner quune seule valeur. e Exemple :
1 2 3 4 5 6 7
< h : s e l e c t O n e M e n u id = " s u b s c r i p t i o n s" value = " #{ s u b s c r i b e r B e a n. s u b s c r i p t i o n s} " > < f : s e l e c t I t e m id = " item1 " i t e m L a b e l= " News " i t e m V a l u e= " 1 " / > < f : s e l e c t I t e m id = " item2 " i t e m L a b e l= " Sports " i t e m V a l u e= " 2 " / > < f : s e l e c t I t e m id = " item3 " i t e m L a b e l= " Music " i t e m V a l u e= " 3 " / > < f : s e l e c t I t e m id = " item4 " i t e m L a b e l= " Java " i t e m V a l u e= " 4 " / > < f : s e l e c t I t e m id = " item5 " i t e m L a b e l= " Web " i t e m V a l u e= " 5 " / > </ h : s e l e c t O n e M e n u>

Rendu HTML :
1 2 3 4 5 6 7
< select id = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s" size = " 1 " > < option value = " 1 " > News </ option > < option value = " 2 " > Sports < / option > < option value = " 3 " > Music </ option > < option value = " 4 " > Java </ option > < option value = " 5 " > Web </ option > </ select >

7.2.25

h :selectOneRadio

Ce composant permet la gnration de radio buttons. Comme pour les composants h :selectOneMenu, selectManye e Checkbox, etc. , le h :selectOneRadio a besoin de selectItem pour gnrer la liste des choix. e e Exemple :
1 2 3 4 5 6 7
< h : s e l e c t O n e R a d i o id = " s u b s c r i p t i o n s" value = " #{ s u b s c r i b e r B e a n. s u b s c r i p t i o n s} " > < f : s e l e c t I t e m id = " item1 " i t e m L a b e l= " News " i t e m V a l u e= " 1 " / > < f : s e l e c t I t e m id = " item2 " i t e m L a b e l= " Sports " i t e m V a l u e= " 2 " / > < f : s e l e c t I t e m id = " item3 " i t e m L a b e l= " Music " i t e m V a l u e= " 3 " / > < f : s e l e c t I t e m id = " item4 " i t e m L a b e l= " Java " i t e m V a l u e= " 4 " / > < f : s e l e c t I t e m id = " item5 " i t e m L a b e l= " Web " i t e m V a l u e= " 5 " / > </ h : s e l e c t O n e R a d i o>

Rendu HTML :
1 2 3 4 5 6 7 8 9
< table id = " f o r m : s u b s c r i p t i o n s" > < tr > < td > < label > < input type = " radio " < td > < label > < input type = " radio " < td > < label > < input type = " radio " < td > < label > < input type = " radio " < td > < label > < input type = " radio " </ tr > </ table >

name = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s" name = " f o r m : s u b s c r i p t i o n s"

value = " 1 " / > value = " 2 " / > value = " 3 " / > value = " 4 " / > value = " 5 " / >

News </ label > </ td > Sports </ label > </ td > Music </ label > < / td > Java </ label > </ td > Web </ label > </ td >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

97/??

Les principaux composants JSF

Attributs : accesskey binding border converter disabled disabledClass enabledClass id immediate lang layout est un attribut standard HTML permettant de dnir une touche du clavier qui capturera e le focus sur ce composant. permet de lis les attributs ` un bean. e a ce composant sencapsule dans un tableau, cet attribut permet de dnir la taille de sa e bordure. Permet dassocier un convertisseur sur la valeur du composant. Permet de dactiver le focus du composant. e Permet de dnir une classe CSS pour les choix dactivs e e e Permet de dnir une classe CSS pour les choix actifs e lid du composant. Permet de court-circuiter ltape de validation du cycle de vie JSF. e Permet de dnire la locale du composant. identique ` son homologue HTML e a Permet de spcier dans quel sens sont gnrs les radios buttons, par dfaut ils sont horizone e e e e taux. Cet attribut accepte comme param`tre lineDirection (horizontale) , ou soit pageDie rection ( verticale ). Permet de dactiver la modication de la valeur du composant. Cependant le focus est e toujours actif, et lutilisateur peut cliquer sur le composant. Expresion EL permetant dacher ou non le composant. Permet de dclarer que ce champs est obligatoire. Cependant avec la JSR-303 cet attribut e ne doit plus tre utilis. e e Dnit la taille du composant en nombre de caract`res. e e Permet de dnir une rendu CSS spcique au composant. Identique ` la balise style en e e a HTML. Permet de dnire le label de linfobulle. identique ` son homologue HTML e a Permet dassocier ` un validateur. Tout comme pour lattribut required, cet attribut ne doit a plus tre utilis. La validation seecture via des annoations grce ` la JSR-303 e e a a Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur JSF permet dassocier un listener sur des champs dun formulaire pour eectuer des traitement spcique lorsque ces deniers changent. La mthode dcoute du listener doit e e e imprativement tre une mthode public avec comme param`tre un objet du type Vale e e e ueChangeEvent. Cette mthode doit galement ne rien retourner (void) e e

readonly rendered required size style title validator value valueChangeListener

e Ev`nement JavaScript : onblur ondblclick onkeypress onmousemove onmouseup onchange onfocus onkeyup onmouseout onselect onclick onkeydown onmousedown onmouseover

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

98/??

Les principaux composants JSF

7.3

Les composants JSF facelets

Le projet facelets a t pouss par JBoss pour combler les lacunes de JSF. Les composants facelets sont tr`s dirents ee e e e des composants standard JSF. Ils fonctionnent un peu comme des listeners tout en gardant lesprit des composants JSF avec larbres de composants. En dehors de la cration de composant personnaliser, on ne voit aucune dirence entre les deux approches. Mais pour e e cre des application JSF performante il est indispensable dutiliser les composants facelets. e Certains produit comme Alfresco ou Nuxeo ont fait une impasse la dessus. Nuxeo ont une meilleurs connaissance de JSF quAlfesco, ils ont conu leurs composants personnaliss sur la base des des composants facelets. c e Le projet facelets est devenu une partie intgrante de JSF2 et JEE 6. e

7.3.1

ui :component

Les ui :component permet de dnir des composants facelets. Dans ces composants tout le code en dehors des balises e ui :component seront ignors. La principale utilits de ce composants est pour la cration de composants composites e e e (composant JSF conu ` base de fragment XHTML) c a Exemple :
1 2 3 4 5
This text will be ignored . < u i : c o m p o n e n t binding = " #{ myBean . c o m p o n e n t} " > < div > Hello World ! </ div > </ u i : c o m p o n e n t> This text will be ignored .

Rendu HTML :
1
< div > Hello World ! </ div >

Attributs : binding id permet de lis les attributs ` un bean. e a lid du composant.

7.3.2

ui :composition

Lui :composition est le composants qui permet de raliser le templating dans JSF. On a pu ce composant dans la e premi`re partie sur le templating JSF. Ce composant est essentiel pour avoir des pages JSF facilement modiable et permet e de faire voluer tr`s facilement linterface graphique. e e Attributs : template le chemin vers le template, relatif ` la page JSF. a

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

99/??

Les principaux composants JSF

7.3.3

ui :debug

Le composant ui :debug permet davoir des informations sur les variables prsentes dans le contexte et sur larbre JSF. e Par dfaut une popup souvre lors que lon fait la combinaison de touche : CTRL + SHIFT + D e

Figure 7.2 ui :debug sur la partie valeur

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

100/??

Les principaux composants JSF

Figure 7.3 ui :debug montrant larbre JSF

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

101/??

Les principaux composants JSF

Exemple :
1
< ui:debug / >

Rendu HTML :
1
This tag g e n e r a t e s J a v a S c r i p t that launches a popup window for d e b u g g i n g purposes .

Attributs : hotkey rendered par dfaut ` CTRL + SHIFT + D, cet attribut permet de changer la combinaison de touche e a permetant dacher la popup de debug. Expresion EL permetant dacher ou non le composant.

7.3.4

ui :decorate

Un peu comme le composant ui :composition, lui :decorate permet dutiliser un fragment XHTML en tant que template. De la mme faon quun template principale, limplmentation du ui :decorate aura besoin de zone prs dnit e c e e e dans le template. Cest zone sont dnit via le composant ui :insert. e Exemple (template.jsf ) :
1 2 3 4 5 6 7 8
< u i : c o m p o s i t i o n> < h2 > < u i : i n s e r t name = " title " / > </ h2 > < div id = " content " > < u i : i n s e r t name = " body " / > </ div > </ u i : c o m p o s i t i o n>

Exemple utilisant le template.jsf :


1 2 3 4 5 6 7 8 9 10
< u i : d e c o r a t e template = " template . jsf " > < u i : d e f i n e name = " title " > Our Products </ u i : d e f i n e> < u i : d e f i n e name = " body " > < ul > < li > Apples </ li > < li > Oranges </ li > < li > Bananas </ li > </ ul > </ u i : d e f i n e> </ u i : d e c o r a t e>

Rendu HTML :
1 2 3 4 5 6 7 8
< h2 > Our Products </ h2 > < div id = " content " > < ul > < li > Apples </ li > < li > Oranges </ li > < li > Bananas </ li > </ ul > </ div >

Attributs : template le chemin vers le template, relatif au fragment JSF.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

102/??

Les principaux composants JSF

7.3.5

ui :insert

Le composant ui :insert permet de dnir des zone ` implmenter dans un template JSF. Il fonctionne en binme avec e a e o le composant ui :dene. Exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13
< html > < head > < title > < u i : i n s e r t name = " title " / > </ title > </ head > < body > < h2 > < u i : i n s e r t name = " header " / > </ h2 > < u i : i n s e r t name = " message " / > </ body > </ html >

Attributs : name cet attribut permet de dnir le nom de la zone ` implmenter. e a e

7.3.6

ui :dene

Le composant ui :dene permet dimplmenter des zone prs-dnit par le ui :insert. Le nom de la zone ` implmenter e e e a e doit tre identique. e Pour rappel, les pages JSF ne sont pas obligs dimplmenter toutes les zones dnit par le template. Si elles ne sont e e e pas implmenter, JSF les ignorera. e Exemple (template.jsf ) :
1 2 3 4 5 6 7 8 9 10 11 12 13
< html > < head > < title > < u i : i n s e r t name = " title " / > </ title > </ head > < body > < h2 > < u i : i n s e r t name = " header " / > </ h2 > < u i : i n s e r t name = " message " / > </ body > </ html >

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

103/??

Les principaux composants JSF

Exemple :
1 2 3 4 5 6 7 8
< u i : c o m p o s i t i o n template = " template . jsf " > < u i : d e f i n e name = " title " > Hello World ! </ u i : d e f i n e> < u i : d e f i n e name = " header " > Foo bar title </ u i : d e f i n e> < u i : d e f i n e name = " message " > One message ... </ u i : d e f i n e> </ u i : c o m p o s i t i o n>

Rendu HTML :
1 2 3 4 5 6 7 8 9 10 11 12 13
< html > < head > < title > Hello World ! </ title > </ head > < body > < h2 > Foo bar title </ h2 > One message ... </ body > </ html >

Attributs : name Permet de dnir la zone ` implmenter e a e

7.3.7

ui :fragment

Le composant ui :fragment permet de dnir un nouveau fragment XHTML. Il est cependant plus rarement utiliser au e prot du ui :composition et ui :component. A la dirence de ces derniers les lments dnit avant et apr`s le composant e ee e e seront intgrs au rendu. e e Exemple :
1 2 3 4 5
This text will be included . < u i : f r a g m e n t binding = " #{ m y B a c k i n g B e a n. c o m p o n e n t} " > </ u i : f r a g m e n t> < div id = " message " > Hello World !/ div > This text will be included .

Rendu HTML :
1 2 3
This text will be included . < div id = " message " > Hello World !/ div > This text will be included .

Attributs : binding id permet de lis les attributs ` un bean. e a lid du composant.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

104/??

Les principaux composants JSF

7.3.8

ui :include

Le composant ui :include permet dinclure un fragment XHTML dans une page ou composant JSF. Il est lquivalent e de linclude que lon retrouve en JSP. Exemple :
1 2
include . jsf < u i : i n c l u d e src = " header . jsf " / > Body text here .

Rendu HTML :
1 2
< h2 > Our Company </ h2 > Body goes here .

Attributs : src lemplacement du chier ` inclure. Relatif ` la page courante. a a

7.3.9

ui :param

Lors de linclusion ou lutilisation de composants JSF, lui :param permet de faire passer des param`tres. e Exemple :
1 2 3
< u i : i n c l u d e src = " hello . jsf " > < ui:param name = " greeting " value = " #{ h e l l o B e a n. message } " / > </ u i : i n c l u d e>

Rendu HTML :
1
< h2 > Hello World </ h2 >

Attributs : name value le nom du param`tre e Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur

7.3.10

ui :remove

Ce composant est particuli`rement important pour le dveloppement. Lui :remove permet de cre des commentaires e e e qui ne seront pas achs au moment du rendu. Il faut donc ne pas hsiter ` en rajouter pour bien documenter son code. e e a Beaucoup de dveloppeurs ignorent ce composant, et utiliser des f :subview avec un rendered ` false. Cependant cela e a demande ` JSF de calculer le rendered, ce qui entraine des pertes de performances inutiles. a Exemple :
1 2 3 4 5 6 7
This text will be d i s p l a y e d. < u i : r e m o v e> <! foo bar . . . . foo bar . . . . This t e x t w i l l be removed . > </ u i : r e m o v e> This text will be d i s p l a y e d.

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

105/??

Les principaux composants JSF

Rendu HTML :
1 2
This text will be d i s p l a y e d. This text will be d i s p l a y e d.

7.3.11

ui :repeat

Dans certains cas, principalement ` lintrieurs de composants JSF, lutilisation de la JSTL peut poser des probl`mes. a e e Pour rappel le context JSF et JSP sont dirents. La JSTL se base sur le context JSP(servlet). Il est donc toujours prfrable e ee dutiliser un quivalent JSF pour les divers fonctionnalits de la JSTL. e e Lui :repeat permet de raliser une itration sur une valeur dun EJB. e e Exemple :
1 2 3 4 5
< ul > < u i : r e p e a t value = " #{ myBean . products } " var = " product " > < li > < h : o u t p u t T e x t value = " #{ product . name } " / > </ li > </ u i : r e p e a t> </ ul >

Rendu HTML :
1 2 3 4 5
< ul > < li > Tennis Racquet </ li > < li > Baseball Bat </ li > < li > Hockey Stick </ li > </ ul >

Attributs : var value le nom de lobjet courant pendant litration. e Cest cet attribut qui permet le mapping entre la vue JSF et une valeur dun EJB. exemple : monBean.valeur

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

106/??

Les principaux composants JSF

7.4

Biblioth`ques de composants e

Lun des avantages de JSF est le fait de pouvoir crer des composants. Plusieurs biblioth`ques de composants on vue le e e jour depuis. JSF 2 a permis de runir les dirents diteurs de composants an quils rendents davantage compatibles leurs e e e dirents composants. e

7.4.1

Richfaces & AjaxForJSF

Richfaces est un projet de communaut JBoss. Cest la biblioth`que par dfaut de Seam. On le reconnait assez facilement e e e grce ` son th`me blue sky assez typique. On le retrouve par exemple dans les popup Ajax de Nuxeo (le composant achant a a e larborescence des document est galement un composant Richfaces, de mme pour les dates, etc... ). e e Richfaces est une tr`s bonne biblioth`que de composants, susant pour crer la majorit des backoces que lon souhaite. e e e e Richfaces inclue AjaxForJSF an de permettre lutilisation asynchrone de dirent composants sans que lon est besoin e dcrire du code JavaScript. Cela est un norme avantage au niveau maintenabilit. Il permet galement de rafraichir certaine e e e e zone de la page JSF en Ajax via lutilisation de zone Ajax (a4j :outputPanel et aj4 :region). Le contrle des appels Ajax est o totalement transparent. Du point de vu du dveloppeur, on interagie directement avec des EJB et lid des composants JSF. e La version 4 de Richfaces a t rcrite en JSF 2 an damliorer ses performance. Le framework JavaScript interne a e e ee e galement t remplac. Cest JQuery qui est ` prsent utilis. e ee e a e e Le site de dmo de Richfaces permet de mieux comprendre ltendu des ses possibilits : e e e http://richfaces-showcase.appspot.com/

7.4.2

Primefaces

Primefaces nest pas la biblioth`que la plus connu dans le monde JSF, cependant le nombre des composants quelle proe pose est tr`s impressionnant. Plus dune centaines de composants dirents, allant de linput de mot de passe au diagrammes e e en html 5, en passant par de lupload html 5 avec drag and drop. Javais dcouvert cette biblioth`que en cherchant comment faire simplement des diagrammes. Il faut avouer que la e e solution que propose Primefaces est extrmement simple et puissante. e Certains de ces composants dmontre une bonne gestion de JSF, comme la dataTable Lazy Loading qui contient 100 e 000 000 dentres sur leur site de dmo. e e Primefaces se base essentiellement sur JQuery UI pour une bonne partie de ses composants. La personnalisation du th`me de ses composants fonctionne exactement de la mme faon que les th`mes JQuery UI. e e c e Gnralement Primefaces est utilis en combinaison avec Richfaces. Primefaces propose galement un th`me blue sky e e e e e pour que les deux biblioth`que se ressemblent. e Pour voir la galeries de ses composants, le site de dmo est disponible ` ladresse suivante : e a http://www.primefaces.org/showcase-labs/ui/home.jsf

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

107/??

Les principaux composants JSF

7.4.3

ICEfaces

ICEfaces est un quivalents de Richfaces, pendant beaucoup de temps les deux biblioth`ques ntaient pas compatible. e e e Avec les derniers versions de ces deux biblioth`ques peut tre que ce probl`me a t rsolu. Cependant il ny a aucun avantage e e e ee e ` mixer les deux. a Le choix entre Richfaces et ICEfaces se portait plus sur un compromis entre les performances et une interfaces sexy. Le style de ICEfaces est plus recherch et bien plus beau, cependant lutilisation massive dAjax et javaScript en fait une e biblioth`que plus lourdes et moins performante que Richfaces. e Le site de dmo est prsent ` ladresse suivant : e e a http ://component-showcase.icefaces.org/component-showcase/

7.4.4

Myfaces & Tomahawk

Ce projet est plutt un projet historique dans le monde JSF. Ctait lune des premi`res biblioth`ques de composants o e e e OpenSource. Cependant ils ont eut beaucoup de dicults ` suivre les volutions et amliorations de JBoss sur JSF. e a e e Myfaces et Tomahowk se retrouve donc totalement incompatible avec Richfaces, provocant des erreurs graphiques et de javaScript. Le projet est galement tr`s mal document, ce qui pour un projet Apache est bien tonnant. e e e e Il faut donc viter dutiliser cette librairie. e

Paris-Lyon-Nantes-Bordeaux-Montpellier Si`ge social : e 48 rue de Villiers 92300 Levallois-Perret

S.A au capital de 570 625 e RCS Nanterre 378 615 363 Code NAF 6201 Z No didentification TVA: FR60378615363

Web

www.smile.fr

108/??

Cinqui`me partie e

Les formulaires

109

Sixi`me partie e

Composants JSF

110

Septi`me partie e

Optimisations

111

Huiti`me partie e

Tests Unitaires

112