如何以编程方式添加新的 ViewState?
How to add new ViewState programatically?
我正在尝试寻找一种在应用程序中执行某些操作时添加新 ViewState 的方法。
用例:
我有一个 spring webflow,在流文件中定义了 2 个静态 ViewState。在第一个视图中有一个 UI 操作将添加一个新的 ViewState。我知道,我可以在流程中添加上述 ViewState,但这只是一个示例。这样的案例我太多了。在 Spring webflow 的早期版本中是可能的。但是现在 ViewState 对象需要一个 ViewFactory 实例。
如何以编程方式在流中添加新的 ViewState?
我认为您对这个问题的思考有误。您可以使用 Spring 表达式语言 (SPEL) 将变量传递到视图状态标记的 'view' 属性中,例如
<action-state id="determineWhichViewStateToRender">
<set name="flowScope.dynamicViewState" value="myService.determineWhichViewState()"/>
<set name="flowScope.modelObj" value="myService.getModelTypeForThisViewState(flowScope.dynamicViewState)"/>
<transition to="myDynamicViewState"/>
</action-state>
<view-state id="myDynamicViewState" view="#{flowScope.dynamicViewState}/edit" model="modelObj">
.....
</view-state>
这将实现您想要的与 "dynamic view-state" 类似的效果,而无需诉诸框架工作黑客。
此外,在示例中,可以将 modelObj 设置为在进入视图状态之前初始化为任何对象类型。
如果动态 SPEL 不够用,那么您将不得不求助于框架黑客。
FlowModelFlowBuilder.class 控制流量 built/initialized。将 FlowModelFlowBuilder.class 和 override/add 扩展到现有方法。
您可能会对 createFlow() 方法感兴趣。通过覆盖、添加或研究其功能来为预定义流注入您自己的 "dynamic view-states"。
createFlow()
Factory method that initially creates the flow implementation during flow builder initialization.
一旦您实现了自己的 FlowBuilder,您就可以像这样将它注入到您的 webflow-registery 配置中:
<webflow:flow-registery id="flowRegistry" flow-builder-services="someFlowBuilderService">
<webflow:flow-location-pattern value="/**/*-flow.xml"/>
<webflow:flow-builder class="com.my.package.MyCustomFlowModelFlowBuilder"/>
</webflow:flow-registery>
免责声明:我个人从未这样做过,但该框架确实允许您注入自己的自定义 FlowBuilder 实现。
我正在尝试寻找一种在应用程序中执行某些操作时添加新 ViewState 的方法。 用例: 我有一个 spring webflow,在流文件中定义了 2 个静态 ViewState。在第一个视图中有一个 UI 操作将添加一个新的 ViewState。我知道,我可以在流程中添加上述 ViewState,但这只是一个示例。这样的案例我太多了。在 Spring webflow 的早期版本中是可能的。但是现在 ViewState 对象需要一个 ViewFactory 实例。
如何以编程方式在流中添加新的 ViewState?
我认为您对这个问题的思考有误。您可以使用 Spring 表达式语言 (SPEL) 将变量传递到视图状态标记的 'view' 属性中,例如
<action-state id="determineWhichViewStateToRender">
<set name="flowScope.dynamicViewState" value="myService.determineWhichViewState()"/>
<set name="flowScope.modelObj" value="myService.getModelTypeForThisViewState(flowScope.dynamicViewState)"/>
<transition to="myDynamicViewState"/>
</action-state>
<view-state id="myDynamicViewState" view="#{flowScope.dynamicViewState}/edit" model="modelObj">
.....
</view-state>
这将实现您想要的与 "dynamic view-state" 类似的效果,而无需诉诸框架工作黑客。
此外,在示例中,可以将 modelObj 设置为在进入视图状态之前初始化为任何对象类型。
如果动态 SPEL 不够用,那么您将不得不求助于框架黑客。
FlowModelFlowBuilder.class 控制流量 built/initialized。将 FlowModelFlowBuilder.class 和 override/add 扩展到现有方法。
您可能会对 createFlow() 方法感兴趣。通过覆盖、添加或研究其功能来为预定义流注入您自己的 "dynamic view-states"。
createFlow()
Factory method that initially creates the flow implementation during flow builder initialization.
一旦您实现了自己的 FlowBuilder,您就可以像这样将它注入到您的 webflow-registery 配置中:
<webflow:flow-registery id="flowRegistry" flow-builder-services="someFlowBuilderService">
<webflow:flow-location-pattern value="/**/*-flow.xml"/>
<webflow:flow-builder class="com.my.package.MyCustomFlowModelFlowBuilder"/>
</webflow:flow-registery>
免责声明:我个人从未这样做过,但该框架确实允许您注入自己的自定义 FlowBuilder 实现。