Après des années de bons et loyaux services, il faut bien avouer que Struts (premier du nom … pour Struts 2, c’est une toute autre histoire) commence un peu à fatiguer et avoue quelque peu ses limites :

  • session encombrée,
  • code de la couche présentation tortueux et fragmenté,
  • support d’Ajax très insuffisant.

Une première chose est de faire le constat. Une seconde est de proposer des solutions alternatives. En bonne place dans le portefeuille (bien gonflé) de Spring, Spring Web Flow est l’une d’entre elles. Seam en est une autre.

Pour faire simple, Spring Web Flow est un framework web permettant de décrire des navigations complexes et riches, telles qu’on les trouve dans les applications Web d’entreprise. Particulièrement élégant, il prend également en charge AJAX et en particulier le rafraichissement partiel de page.

La navigation est un processus, …

Spring Web Flow propose de décrire une navigation sous forme d’un flow (ou processus de navigation). Un flow est en fait une machine à état composée classiquement d’états et de transitions. Cette représentation permet de donner une représentation globale de la navigation dans une application Web. Bien entendu, un flow peut être représenté sous forme graphique, offrant ainsi une vision particulièrement synthétique. Le flow contrôle également l’échange de données avec les vues (les pages).

Le processus de navigation est exprimé, de manière particulièrement élégante, dans un langage spécifique (DSL), représenté sous forme XML.

… un processus que l’on peut réutiliser

Un processus de navigation est d’abord composé d’états qui peuvent être :

  • une vue, en fait simplement une page,
  • une action, déclenchée entre deux vues,
  • un appel à un autre processus de navigation, créant ainsi un sous-processus de navigation (ou subflow) à l’intérieur du processus principal.

Cette dernière possibilité est particulièrement capitale, elle permet en effet la réutilisation de processus de navigation.

Ainsi, prenons le cas d’un assistant permettant de choisir un établissement bancaire, au travers d’une série d’étapes, correspondant chacune à une page. On souhaite pouvoir bénéficier de l’assistant, depuis plusieurs pages de l’application principale.

Avec Spring Web Flow, l’assistant peut être décrit sous forme d’un processus de navigation propre. L’application peut, elle aussi, être décrite sous forme d’un processus de navigation. Il suffit alors de réutiliser le processus de navigation de l’assistant, dans le processus de navigation principal, et ceci autant de fois que nécessaire.

Et Ajax ?

Ajax est directement pris en charge au sein de Spring Web Flow. Il est ainsi possible de déclencher le rafraîchissement d’une partie seulement d’une page. Pour cela, on devra délimiter et nommer la section dans la page, et déclencher le rafraichissement dans un état du flow.

Et Seam ?

C’est assez clair. Les points communs entre Spring Web Flow et Seam sont nombreux. On trouve ainsi des fonctionnalités équivalentes à Spring Web Flow dans jPDL et jBPM. jBPM est cependant plus ambitieux : il permet non seulement de décrire des processus de navigation, mais également des processus métier, des workflows, etc.

Références

Billets sur le même thème