从全局菜单转换到参数化的Webflow视图状态

时间:2015-03-06 00:57:05

标签: java spring jsp spring-webflow transitions

背景

带有链接的简单菜单系统,应显示特定的报告参数页面。以下是它的工作原理:

  1. 用户点击"搜索"菜单,切换到系统搜索网络流程。
  2. 用户点击"报告"子菜单(例如,"错误遇到......")。
  3. 用户将被带到错误遭遇报告。
  4. Menu

    reports-flow.xml包含:

    <view-state id="list" view="flow/reports/list">
        <transition on="parameters" to="parameters">
            <set name="flowScope.reportKey" value="requestParameters.key" />
            <evaluate expression="reportService.createReport()" result="flowScope.report" />
        </transition>
    </view-state>
    
    <view-state id="parameters" model="report" view="flow/reports/parameters">
        <on-render>
            <set name="viewScope.pageId" value="'osre02'" />
            <evaluate expression="siteService.find()" result="viewScope.siteList" />
            <evaluate expression="agencyService.findActiveMunicipalities()" result="viewScope.municipalityList" />
        </on-render>
    
        <transition on="run" to="redirect" />
    </view-state>
    

    flow/reports/list页面包含:

    <li><a href="${flowExecutionUrl}&amp;_eventId=parameters&amp;key=report_name">Report Name</a></li>
    

    问题

    以下任何一项工作都不能退出系统搜索网络流程,并在传递报告参数键时输入报告网络流程。

    <a href="reports?_flowId=reports&_eventId=parameters&key=report_name">Report Name</a>
    <a href="reports?_eventId=parameters&key=report_name">Report Name</a>
    <a href="reports?execution=${flowExecutionKey}&amp;_eventId=parameters&key=report_name">Report Name</a>
    <a href="${flowExecutionUrl}&amp;_eventId=parameters&key=report_name">Report Name</a>
    

    错误

    在System Search网络流程中,出现以下错误:

      

    请求处理失败;嵌套异常是org.springframework.webflow.engine.NoMatchingTransitionException:没有发现事件&#39;参数&#39;在州&#39;标准&#39;流量/流量/会话搜索&#39; - 有效的过渡标准是数组[今天搜索] ......等等。

    在报表流中已经单击其中一个菜单链接时,此错误消失。这是有道理的,因为系统搜索不了解报告流程和菜单(理想情况下,它不应该)。

    要使报告流解析为全局菜单,可以按如下方式设置全局转换:

    <global-transitions>
        <transition on="parameters" to="parameters">
            <set name="flowScope.reportKey" value="requestParameters.key" />
            <evaluate expression="reportService.createReport()" result="flowScope.report" />
        </transition>
    </global-transitions>
    

    使用以下命令自动装配文件配置:

    @Configuration
    public class SharedWebFlowConfig extends AbstractFlowConfiguration {
        @Bean
        public FlowDefinitionRegistry sharedFlowRegistry() {
            return getFlowDefinitionRegistryBuilder().addFlowLocation("/WEB-INF/flow/common/global-transitions.xml", "global-transitions").build();
        }
    }
    

    问题

    构思部分中描述的设置会导致以下错误:

      

    java.lang.IllegalArgumentException:找不到具有id&#39;参数&#39;的状态在流程&流程/会话搜索&#39; - 已知州ids ......

    如何从parameters全球范围内制作reports-flow.xml观看状态?

    什么是更好的方法?

1 个答案:

答案 0 :(得分:0)

使用<on-start><decision-state>将请求参数带入流量范围并获取模型:

<on-start>
    <set name="flowScope.reportKey" value="requestParameters.key" type="string" />
    <evaluate expression="reportService.createReport()" result="flowScope.report" />
</on-start>

<decision-state id="direct">
    <if test="flowScope.reportKey == null" then="list" else="parameters" />
</decision-state>

使用应用程序中任何位置(和任何流程)的超链接来更改流程:

<a href="reports?key=report_name">Report Name</a>

如果flowScope.reportKey为空,则流程将指向列表页面。如果flowScope.reportKey不为空,则流程将指向参数页面。

不需要进行全局转换。