56
SPRING WEBFLOW 1 Cours JEE - Master 2 Université de Marne-la-Vallée dimanche 14 novembre 2010

SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

  • Upload
    buicong

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

SPRING WEBFLOW

1

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 2: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

RAPPEL D’ARCHITECTURE

2

Cours JEE - Master 2 Université de Marne-la-ValléePersistance des données

dimanche 14 novembre 2010

Page 3: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

PROBLÉMATIQUE

3

Cours JEE - Master 2 Université de Marne-la-Vallée

Comment faire le lien entre mes vues graphiques et ma logique métier en

respectant les contraintes (maintenance, coût & temps de dev., performance,

portabilité, ...) de développement d’applications d’entreprise ?

dimanche 14 novembre 2010

Page 4: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

LE DESIGN PATTERN FRONT-CONTROLLER

4

Cours JEE - Master 2 Université de Marne-la-Vallée

Lorsque l’on accède directement à une vue sans passer par un système centralisé, deux problèmes peuvent apparaître:

• Chaque vue va fournir ses propres services, ce qui entraîne une duplication du code;

• On mélange la partie navigation et la partie affichage

De plus, le contrôleur est plus compliqué à maintenir car il est dilué dans plusieurs endroits de l’application.

dimanche 14 novembre 2010

Page 5: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

FRONT-CONTROLLER

5

Cours JEE - Master 2 Université de Marne-la-Vallée

Utilisation d’un contrôleur comme point d’entrée de traitement des requêtes. Le contrôleur va gérer le traitement des requêtes (authentification et droits d’accès), la délégation des traitements métier, la gestion du choix de la vue appropriée, le traitement des erreurs et la gestion des stratégies de création de contenu.

dimanche 14 novembre 2010

Page 6: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

FRONT-CONTROLLER

Le contrôleur va être couplé avec un dispatcheur en charge de la gestion des vues et de la navigation.

Le dispatcheur peut être directement encapsulé dans le contrôleur ou peut être vue comme un composant séparé.

6

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 7: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

SCHÉMA UML

7

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 8: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

SPRING WEBFLOW

8

Cours JEE - Master 2 Université de Marne-la-Vallée

Spring WebFlow est une extension du pattern MVC permettant de définir la navigation entre les différentes pages d’une application Web.

C’est un front-controller !

dimanche 14 novembre 2010

Page 9: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

SPRING WEBFLOW

9

Cours JEE - Master 2 Université de Marne-la-Vallée

• mécanisme (Work Flow) permettant:

• décrire la navigation

• limiter les portées au sein d’un processus

• DSL permettant de décrire le processus de navigation (XML)

• séparation claire entre:

• logique de navigation et logique applicative

• logique métier

dimanche 14 novembre 2010

Page 10: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

POUR RAPPEL...

logique de navigation sans état !

vs.

logique applicative avec état!

10

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 11: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

AVANTAGES• règles de navigation encapsulées dans un seul endroit

• découpage en couche des développements

• suivre la logique applicative sans entrer dans l’implantation

• réutilisation d’un processus à plusieurs endroits

• limitation des portées (optimisation de la mémoire)

• principe de conversation:

• plus longue qu’une simple requête; plus courte qu’une session

11

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 12: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

ENRICHISSEMENT DE JSF

• comble certaines limitations de JSF:

• navigation trop verbeuse

• difficilement maintenable sur de gros projets

• pas de variables de portées « Conversation »

12

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 13: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

AMELIORE LES COÛTS

• les flows sont rechargeables à chaud en phase de dev.

• syntaxe des flows est compréhensible par des non techniques

• réutilisation des flows sous forme de sous-flow

•modularisation de pans entiers de navigation

• intégration naturelle avec Spring

13

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 14: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

DESCRIPTION D’UN FLOW

14

Cours JEE - Master 2 Université de Marne-la-Vallée

Un flow ou processus de navigation est tout simplement une machine à états finie !

dimanche 14 novembre 2010

Page 15: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

DESCRIPTION D’UN FLOW

15

Cours JEE - Master 2 Université de Marne-la-Vallée

• décrit dans un fichier xml

• le nom du fichier est de la forme (*-flow.xml)

• paradigm « Convention over Configuration »

• dans le répertoire src/main/webapp/WEB-INF/flows

• les vues sont placées au même endroit

• les fichiers de localisation aussi

• les sous-flows dans un sous-répertoire

dimanche 14 novembre 2010

Page 16: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

DESCRIPTION D’UN FLOW

• le fichier xml va décrire:

• les états de la machine à états finie

• les transitions entre ses états

• les différentes actions déclenchées

16

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 17: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE

17

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 18: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE

18

Cours JEE - Master 2 Université de Marne-la-Vallée

<flow> <view-state id=«products»> <transition on=«add»>...</transition> <transition on=«checkout» to=«checkout»>...</transition> </view-state>

<view-state id=«checkout»> <transition on=«delete»>...</transition> <transition on=«bill» to=«bill»>...</transition> </view-state>

<view-state id=«bill»> <transition on=«valid» to=«end»>...</transition> </view-state>

<end-state id=«end»> ... </end-state></flow>

dimanche 14 novembre 2010

Page 19: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

DIFFÉRENTS TYPES D’ÉTATS

19

Cours JEE - Master 2 Université de Marne-la-Vallée

• start-state

• view-state

• end-state

• decision-state

• action-state

dimanche 14 novembre 2010

Page 20: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

START-STATE• état de départ d’un flow

• il peut ne pas être défini

• le premier état sera alors l’état de départ

• regroupe les traitements à faire pour initialiser un flow

• renseigné les valeurs des variables par exemple

20

Cours JEE - Master 2 Université de Marne-la-Vallée

<start-state>...</start-state>

dimanche 14 novembre 2010

Page 21: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

VIEW-STATE

• correspond à une page que l’on souhaite afficher

• quand on entre dans un view-state on affiche la page correspondant à l’état

• l’utilisateur va générer des événements

• ces événements vont faire changer le flow d’état

21

Cours JEE - Master 2 Université de Marne-la-Vallée

Lors de l’affichage le flow est en pause !

dimanche 14 novembre 2010

Page 22: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE

22

Cours JEE - Master 2 Université de Marne-la-Vallée

<view-state id=«toto» view=«toto»> <transition on=«connect» to=«connect»> <evaluate expression=«...» value=«...»/> </transition></view-state>

dimanche 14 novembre 2010

Page 23: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

VIEW-STATE

• Action effectuée lors de l’entrée d’un view-state

•<on-entry></on-entry>

• Action effectuée avant l’affichage de la vue

•<on-render></on-render>

• Action effectuée lors de la sortie d’un view-state

•<on-exit></on-exit>

23

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 24: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

ACTIONS VIEW-STATE

24

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 25: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

RENDERING DE FRAGMENTS

25

Cours JEE - Master 2 Université de Marne-la-Vallée

on peut demander de ne réafficher qu’une partie d’une vue

<transition on="next"> <evaluate expression="..." /> <render fragments="totoFragment" /> </transition>

Très important pour les performances !

dimanche 14 novembre 2010

Page 26: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

END-STATE

• permet de définir la page à afficher ou les actions à effectuer à la fin d’un flow

• lors du passage dans un end-state les données liées à l’instance du flow ne sont plus accessibles

26

Cours JEE - Master 2 Université de Marne-la-Vallée

<end-state> ...</end-state>

dimanche 14 novembre 2010

Page 27: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

DECISION-STATE

• exécution d’un code non visuel

• dépend de données présentes dans le flow

• peut être associé au contrôleur dans un MVC

27

Cours JEE - Master 2 Université de Marne-la-Vallée

<decision-state> ...</decision-state>

dimanche 14 novembre 2010

Page 28: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE

<decision-state id="isToto"> <if test="t.isToto()"

then="toto" else="titi" />

</decision-state>

28

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 29: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

ACTION-STATE

• exécution d’un code non visuel

• fait appel à des méthodes d’actions à l’entrée de ce type d’état

• comparable à la partie contrôleur dans un MVC

• va chercher de l’information pour réaliser son routage

29

Cours JEE - Master 2 Université de Marne-la-Vallée

<action-state> <evaluate expression=«...» value=«...» /> ...</action-state>

dimanche 14 novembre 2010

Page 30: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

APPEL À UNE ACTION

30

Cours JEE - Master 2 Université de Marne-la-Vallée

public class CustomMultiAction extends MultiAction { public Event actionMethod1(RequestContext context) { ... }

public Event actionMethod2(RequestContext context) { ... }}

<evaluate expression="multiAction.actionMethod1" />

Dans l’action state du flow:

Code Java de l’action:

dimanche 14 novembre 2010

Page 31: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

TRAITEMENT DES EXCEPTIONS

31

Cours JEE - Master 2 Université de Marne-la-Vallée

public class BookingAction { public String makeBooking(Booking booking, RequestContext context) { try { BookingConfirmation confirmation = bookingService.make(booking); context.getFlowScope().put("confirmation", confirmation); return "success"; } catch (RoomNotAvailableException e) { context.addMessage(new MessageBuilder().error(). .defaultText("No room is available at this hotel").build()); return "error"; } }}

dimanche 14 novembre 2010

Page 32: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

ACTION-STATE VS.

DECISON-STATE

• decision-state permet de prendre une décision de routage en fonction d’éléments existants

• action-state permet de prendre une décision de routage en fonction du résultat de l’exécution d’une ou plusieurs actions

32

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 33: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

TRANSITIONS GLOBALES

33

Cours JEE - Master 2 Université de Marne-la-Vallée

Transitions valides quelque soit l’état du flow !

<global-transitions> <transition on=«toto» to=«titi» /></global-transitions>

Exemple:

dimanche 14 novembre 2010

Page 34: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

VARIABLES & PORTÉES

34

Cours JEE - Master 2 Université de Marne-la-Vallée

• portée application

• portée session

• portée request

• portée page

Traditionnellement, 4 types de portée:

dimanche 14 novembre 2010

Page 35: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

PROBLÉMATIQUE

35

Cours JEE - Master 2 Université de Marne-la-Vallée

La portée session est trop étendue car elle couvre l’ensemble des interactions d’un utilisateur avec l’application !

La portée request est souvent trop brève car elle se limite à une interaction requête / réponse !

dimanche 14 novembre 2010

Page 36: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

DE NOUVELLES PORTÉES...

36

Cours JEE - Master 2 Université de Marne-la-Vallée

• request

• flash

• view

• flow

• conversation

De la plus restreinte à la plus globale:

dimanche 14 novembre 2010

Page 37: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

LES PORTÉES WEBFLOW

• réduction du risque d’erreurs dus à un partage trop global

• réutilisation d’une partie de l’application dans un autre contexte

• pas d’impact ou remise en cause du reste de l’application

37

Cours JEE - Master 2 Université de Marne-la-Vallée

Ces nouvelles portées permettent:

Une portée est définie pour chaque variable déclarée au sein du flow !

dimanche 14 novembre 2010

Page 38: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

PORTÉE FLOW

• un flow est un processus métier indépendant représentant un cas d’utilisation particulier de l’application

• un flow est constitué de quelques vues et des données associées qui sont stockées

• la portée flow correspond de l’état de départ du flow à l’état fin du flow

38

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 39: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

PORTÉE VIEW

• une vue correspond à une page qui visualise des informations

• une portée vue correspond à l’entrée dans le view-state à la sortie du view-state

39

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 40: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

PORTÉE CONVERSATION

• une conversation est stockée dans la session HTTP

• une variable à une durée de vie de l’état de départ du flow parent à l’état fin du flow parent

• elle est partagée par le flow parent et tout ses sous-flows

40

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 41: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

Comment passer des paramètres à un flow ?

41

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 42: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

INPUT / OUTPUT D’UN FLOW

• Chaque flow peut définir un contrat bien définie de variables en entrée et en sortie

• Chaque flow peut récupérer des variables en entrée quand il commence

• Chaque flot peut retourner des variables en sortie quand il s’arrête

42

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 43: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

INPUT / OUTPUT D’UN FLOW

• on utilise l’élément input pour déclarer une variable d’entrée d’un flow

• on utilise l’élement output pour déclarer une variable de sortie d’un flow

• dans les deux cas on peut déclarer un type

• dans les deux cas on peut déclarer une valeur

43

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 44: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLES: INPUT

44

Cours JEE - Master 2 Université de Marne-la-Vallée

<input name="hotelId" type="long" />

<input name="hotelId" value="flowScope.hotels.hotelId" />

<input name="hotelId" type="long" value="flowScope.hotelId" required="true" />

dimanche 14 novembre 2010

Page 45: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLES: OUTPUT

45

Cours JEE - Master 2 Université de Marne-la-Vallée

<end-state id="bookingConfirmed"> <output name="bookingId" /> </end-state>

<output name="confirmation" value="booking.confirmation" />

dimanche 14 novembre 2010

Page 46: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

VARIABLES IMPLICITES

• flowScope

• requestScope

• viewScope

• requestScope

• flashScope

• conversationScope

• requestParameters

• currentUser

• currentEvent

•messageContext

• resourceBundle

46

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 47: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE FLOWSCOPE

47

Cours JEE - Master 2 Université de Marne-la-Vallée

<evaluate expression="searchService.findHotel(id)" result="flowScope.hotel" />

<evaluate expression="searchService.findHotel(id)" result="conversationScope.hotel" />

dimanche 14 novembre 2010

Page 48: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE CURRENTUSER

48

Cours JEE - Master 2 Université de Marne-la-Vallée

<evaluate expression="bookingService.createBooking(id, currentUser.name)" result="flowScope.booking" />

dimanche 14 novembre 2010

Page 49: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

CONVERTIR

• conversion des données dans le form (string) vers le bon type de données dans le modèle

• des convertisseurs sont déjà définis pour les types de données primitifs (entiers, réels, énumérations et dates)

• on peut souhaiter rajouter un convertisseur spécifique

49

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 50: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

CONVERTIR

• étendre d’une classe déjà définie

• StringToObject

• deux méthodes sont à implanter :

50

Cours JEE - Master 2 Université de Marne-la-Vallée

protected abstract Object toObject(String s, Class Clazz) throws Exception;

protected abstract String toString(Object object) throws Exception;

dimanche 14 novembre 2010

Page 51: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE

51

Cours JEE - Master 2 Université de Marne-la-Vallée

public class StringToMonetaryAmount extends StringToObject {

public StringToMonetaryAmount() { super(MonetaryAmount.class); }

@Override protected Object toObject(String string, Class clazz) { return MonetaryAmount.valueOf(string); }

@Override protected String toString(Object object) { MonetaryAmount amount = (MonetaryAmount) object; return amount.toString(); }}!

dimanche 14 novembre 2010

Page 52: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

ENREGISTREMENT D’UN CONVERTISSEUR

52

Cours JEE - Master 2 Université de Marne-la-Vallée

@Component("conversionService")public class ApplicationConversionService extends DefaultConversionService{    @Override    protected void addDefaultConverters() {        super.addDefaultConverters();                this.addConverter(new StringToMonetaryAmount());        this.addConverter("monetaryAmount", new StringToMonetaryAmount());    }}

ajout d’un service fournissant la ou les nouvelles conversions

dimanche 14 novembre 2010

Page 53: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

ENREGISTREMENT D’UN CONVERTISSEUR

53

Cours JEE - Master 2 Université de Marne-la-Vallée

modification du fichier xxx-webflow-config.xml

<faces:flow-builder-services id="facesFlowBuilderServices" development="true" conversion-service="conversionService"/>

dimanche 14 novembre 2010

Page 54: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

VALIDER• validation des objets saisis par les utilisateurs

• implantation d’un valideur

• ${model}Validator

• convention over configuration!

•@Component

•méthode validate${state}

• state correspond à l’id du view-state

54

Cours JEE - Master 2 Université de Marne-la-Vallée

dimanche 14 novembre 2010

Page 55: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

EXEMPLE

55

Cours JEE - Master 2 Université de Marne-la-Vallée

@Componentpublic class BookingValidator { public void validateEnterBookingDetails(Booking booking, ValidationContext context) { MessageContext messages = context.getMessageContext(); if (booking.getCheckinDate().before(today())) { messages.addMessage(new MessageBuilder().error().source("checkinDate"). defaultText("Check in date must be a future date").build()); } else if (!booking.getCheckinDate().before(booking.getCheckoutDate())) { messages.addMessage(new MessageBuilder().error().source("checkoutDate"). defaultText("Check out date must be later than check in date").build()); } }}

dimanche 14 novembre 2010

Page 56: SPRING WEBFLOW - loyaute/course/doc/M2/M2-10-11/fall/jee/04... · LE DESIGN PATTERN FRONT-CONTROLLER 4 Cours JEE - Master 2 Université de Marne-la-Vallée ... Utilisation d’un

SUPPRESSION DE LA VALIDATION

56

Cours JEE - Master 2 Université de Marne-la-Vallée

<view-state id="chooseAmenities" model="booking"> <transition on="proceed" to="reviewBooking"> <transition on="back" to="enterBookingDetails" validate="false" /></view-state>

dimanche 14 novembre 2010