【问题标题】:Spring Webflow: how to force a flow to start again?Spring Webflow:如何强制流程重新开始?
【发布时间】:2012-10-02 15:19:42
【问题描述】:

我是 SWF 新手,意外继承了 SWF 应用程序的维护。

用户在屏幕顶部有一个水平菜单,其中显示 5 个选项。单击其中一个时,屏幕中会加载一个 portlet。

两天前,我收到了一个任务:每当用户点击其中一个选项时,portlet 必须忽略其先前的状态并重新开始。

示例:其中一个 portlet 称为“SEARCH”,另一个称为“REPORTS”。今天,如果用户点击“搜索”,应用程序会显示一个小表单和一个“开始”按钮。单击“开始”后,应用程序会显示一个结果列表,每个结果都带有一个编辑按钮。单击编辑其中之一后,应用程序会显示所选结果的详细信息。到目前为止,一切都很好。

继续该示例,假设用户现在单击菜单中的“报告”选项。该应用程序将显示报告 portlet 及其自己的内容。再说一次,到目前为止,一切都很好。

但是,如果用户现在再次单击“搜索”,portlet 将显示其最后状态,即先前搜索项目的版本。

我被要求更改此行为,因此每次用户单击“搜索”时,它将打开为空,也就是说,portlet 的 webflow 将重新从头开始。

我该怎么做?有人可以帮帮我吗?

我搜索了SMF的文档,也研究了spring-webflow-config-2.0.xsd文件,找了一些针对这个案例的具体配置,但是没有用。

谢谢,

FQL

【问题讨论】:

  • 我不确定我是否理解正确,但如果您想从头开始一个流程,您可以使用该流程的 url,可能是 /youAppName/search.do 或类似的东西

标签: spring portlet spring-webflow spring-webflow-2


【解决方案1】:

试试这个方法:

创建一个新的流定义 xml 文件,您应该在其中放置一组将重定向到流的结束状态,以及一组将转换为结束状态的全局转换。因此,您应该为每个菜单项添加一个结束状态和一个全局转换。

<end-state id="searchMenuItem" view="flowRedirect:searchFlowName" />

<end-state id="reportsMenuItem" view="flowRedirect:reportsFlowName" />    

<global-transitions>    
    <transition on="searchMenuItem" to="searchMenuItem" />      
    <transition on="reportsMenuItem" to="reportsMenuItem" />        
</global-transitions>

将此流定义添加到流注册表并作为父流添加到所有流。因此,所有流都应该具有可见的最终状态和全局转换。

编辑菜单链接以使用全局过渡:

<a href="${flowExecutionUrl}&_eventId=searchMenuItem">Search</a>   
<a href="${flowExecutionUrl}&_eventId=reportsMenuItem">Reports</a>

这会导致当用户单击菜单项时,其全局转换将触发,从而导致转换到最终状态并将流重定向到所需的流。

希望这会有所帮助。

【讨论】:

  • 对我帮助很大。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2015-07-30
  • 2011-10-19
  • 2014-11-07
相关资源
最近更新 更多