0

我得到了相当大的 webflow 定义,我不想复制/粘贴以重复使用。XML中有对action bean的引用,这很自然。

我想两次使用相同的流定义:第二次使用不同配置的操作(向其注入不同的服务实现)。

有没有简单的方法可以做到这一点?


问题是我想在同一个应用程序中一次对不同的 bean 使用相同的流。复制/粘贴不好,但我现在看不到其他解决方案。

4

4 回答 4

2

You could try creating a new flow that extends the "pretty big one" and adding flowExecutionListeners to it.

The interface "FlowExecutionListener"defines methods for the following events in flow execution:

  • requestSubmitted
  • requestProceessed
  • sessionCreating
  • sessionStarting
  • sessionStarted
  • eventSignaled
  • transitionExecuting
  • stateEntering
  • viewRendered
  • viewRendering
  • stateEntered
  • paused
  • resuming
  • sessionEnding
  • sessionEnded
  • exceptionThrown

You can write a handler that injects the required resources to your flow (and use different handles with different flows) by storing it in the RequestContext, where you can access it in your flow definition.

Note that in that case you would still have to modify the "pretty big flow" to use those resources instead of referencing the beans directly.

于 2008-09-22T12:20:48.947 回答
1

我与您处于同一个修复程序中...我有不同的子类,它们具有相应的操作 bean,但是很多流程是相同的。过去我们只是复制和粘贴……对此不满意!我有一些想法要尝试使用表达式语言。首先,我想出了一个动作 bean 工厂,它将返回正确的动作 bean 以用于给定的类,然后我可以调用该工厂来设置一个我可以使用的变量,而不是硬编码的 bean 名称。

这是流程的一部分:

<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"/>

最后一行中的评估通常会直接引用一个 bean,但现在它引用了我刚刚所做的“设置”的结果。

好消息——正确的 bean 被调用。

坏消息——流范围内的任何东西都需要可序列化,所以我得到一个 NotSerializableException——啊!

我可以尝试在一个非常短暂的范围内设置一些东西,在这种情况下,它需要一直被调用......或者我可以找出某种代理,它将真正的 bean 保存为声明为“瞬态”的代理。

顺便说一句,我使用的是 Spring 2.5.6 和 webflow 2.0.7。以后的版本可能有更好的处理方法;特别是 EL 似乎受到了一些关注。我仍然坚持使用 OGNL,它是 Spring 1.x EL。

我敢肯定,一些 webflow 大师知道以不那么笨拙的方式做事的其他方式......

于 2010-10-30T04:09:51.860 回答
0

我认为您不能将相同的 webflow 定义与以两种不同方式配置的操作一起使用。

如果您想使用不同的操作,您要么必须重新配置您的操作 bean,然后重新部署您的应用程序,要么使用不同配置的 bean 创建一个单独的 webflow 定义。

是一个很棒的 Spring WebFlow 资源。

于 2008-09-19T19:19:45.470 回答
0

尝试重构子流中的公共可配置部分并从要重用它的不同主要流中调用子流。

将参数传递给子流以任何需要的方式对其进行配置,使用spring表达式语言传递不同的spring bean等。

于 2013-12-08T17:05:22.917 回答