2

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

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

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

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

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

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

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

我怎样才能做到这一点?有人可以帮我吗?

我搜索了 SMF 的文档,也研究了 spring-webflow-config-2.0.xsd 文件,为这个案例寻找了一些具体的配置,但无济于事。

谢谢,

FQL

4

1 回答 1

3

试试这个方法:

创建一个新的流定义 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>

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

希望这可以帮助。

于 2012-10-21T21:40:13.237 回答