Java 从全局菜单转换到参数化webflow视图状态 出身背景

Java 从全局菜单转换到参数化webflow视图状态 出身背景,java,spring,jsp,spring-webflow,transitions,Java,Spring,Jsp,Spring Webflow,Transitions,带有链接的简单菜单系统应显示特定的报告参数页面。下面是它的工作原理: 用户单击“搜索”菜单,切换到系统搜索web流 用户单击“报告”子菜单(例如,“遇到错误…”) 用户将转到“遇到的错误”报告 reports flow.xml包含: <view-state id="list" view="flow/reports/list"> <transition on="parameters" to="parameters"> <set name="f

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

  • 用户单击“搜索”菜单,切换到系统搜索web流
  • 用户单击“报告”子菜单(例如,“遇到错误…”)
  • 用户将转到“遇到的错误”报告
  • 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>
    
    <li><a href="${flowExecutionUrl}&amp;_eventId=parameters&amp;key=report_name">Report Name</a></li>
    
    问题 在传递报表参数键的同时,以下操作均无法退出系统搜索web流并输入报表web流

    <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>
    
    问题 idea部分中描述的设置会导致以下错误:

    java.lang.IllegalArgumentException:在流“flow/sessionSearch”中找不到id为“parameters”的状态--已知状态id

    如何从
    reports flow.xml
    全局设置
    parameters
    视图状态

    更好的方法是什么?

    使用
    将请求参数引入流范围并获得模型:

    <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
    不为空,则流将指向参数页面

    不需要全局转换

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