2008-09-19 5 views
0

J'ai obtenu une définition de flux Web assez volumineuse, que je ne veux pas copier/coller pour la réutiliser. Il y a des références à l'action bean en XML, ce qui est plutôt naturel. Je souhaite utiliser la même définition de flux deux fois: la deuxième fois avec des actions configurées différemment (injecter différentes implémentations de service).Réutilisation des définitions Spring Webflow avec différentes implémentations d'actions

Existe-t-il un moyen facile de le faire?


Problème est que je veux utiliser le même flux avec différents haricots à la fois, dans la même application. Copier/Coller est mauvais, mais je ne vois pas d'autre solution pour l'instant.

Répondre

0

Je ne pense pas que vous pouvez utiliser la même définition de flux Web avec les actions configurées de deux manières différentes.

Si vous souhaitez utiliser différentes actions, vous devrez reconfigurer vos beans d'action, puis redéployer votre application ou créer une définition de flux Web distincte avec les beans configurés différemment.

This est une excellente ressource Spring WebFlow.

2

Vous pouvez essayer de créer un nouveau flux qui étend le "joli gros" et en ajoutant des FlowExecutionListeners.

L'interface "FlowExecutionListener" définit des méthodes pour les événements suivants dans l'exécution d'écoulement:

  • requestSubmitted
  • requestProceessed
  • sessionCreating
  • sessionStarting
  • sessionStarted
  • eventSignaled
  • transitionExecuting
  • stateEntering
  • viewRendered
  • viewRendering
  • stateEntered
  • pause
  • reprise
  • SessionEnding
  • sessionEnded
  • exceptionThrown

Vous pouvez écrire un gestionnaire qui injecte les ressources requises dans votre flux (et utiliser différentes poignées avec des flux différents) en les stockant dans RequestContext, où vous pouvez y accéder dans votre définition de flux. Notez que dans ce cas, vous devrez toujours modifier le "gros débit" pour utiliser ces ressources au lieu de référencer directement les beans.

+0

la question est maintenant si les haricots d'action sont :-) statefull ou sans état doivent vérifier –

1

Je suis dans le même correctif que vous êtes ... J'ai différentes sous-classes qui ont des beans d'action correspondants, mais une grande partie du flux est la même. Dans le passé, nous avons simplement copié et collé ... pas content de ça! J'ai quelques idées que je vais essayer d'utiliser le langage d'expression. Tout d'abord, je suis arrivé avec une usine de bean action qui retournera le bon bean d'action à utiliser pour une classe donnée, alors je peux appeler cette usine pour définir une variable que je peux utiliser à la place du nom de bean codé en dur.

est ici une partie du flux:

<action-state id="checkForParams"> 
    <on-entry> 
     <set name="flowScope.clientKey" value="requestParameters.clientKey"/> 
     <set name="flowScope.viewReportBean" 
       value="reportActionFactory.getViewBean(reportUnit)"/> 
    </on-entry> 
    <evaluate expression="viewReportBean"/> 

L'dans la dernière évaluer la ligne normalement se référer directement à un grain, mais maintenant il fait référence au résultat de la « set » Je viens de faire.

Bonnes nouvelles - le haricot droit est appelé.

Mauvaises nouvelles - tout ce qui se trouve dans la portée de flux doit être sérialisable, donc j'obtiens une exception NotSerializableException - arggh!

Je peux essayer de définir quelque chose sur une portée de très courte durée, auquel cas il devra être appelé tout le temps ... ou je peux trouver une sorte de proxy qui détient le vrai bean comme proxy déclaré "transitoire".

BTW, j'utilise Spring 2.5.6 et webflow 2.0.7. Les versions ultérieures peuvent avoir de meilleures façons de gérer cela; en particulier, les EL ont attiré l'attention, semble-t-il. Je suis toujours coincé avec OGNL, qui est le printemps 1.x EL.

Je suis sûr que certains gourou webflow connaît d'autres façons de faire les choses de façon moins maladroites ...

0

Essayez de refactoriser la partie configurable commune dans un subflow et appeler le sous-flux de différents principaux flux où vous voulez le réutiliser.

passer des paramètres à la sous-flux pour le configurer de quelque manière que nécessaire, en utilisant le langage d'expression de printemps pour passer différents grains de printemps, etc.

Questions connexes