【问题标题】:Transition to parameterized webflow view state from global menu从全局菜单转换到参数化的 webflow 视图状态
【发布时间】:2015-03-07 04:35:08
【问题描述】:

背景

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

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

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>

错误

从系统搜索 web 流中,出现以下错误:

请求处理失败;嵌套异常是 org.springframework.webflow.engine.NoMatchingTransitionException:在流 'flow/sessionSearch' 的状态 'criteria' 中出现事件 'parameters' 时未找到转换 - 有效的转换条件是 array[search, today] ...等等

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

想法

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

<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:在流“flow/sessionSearch”中找不到 ID 为“parameters”的状态——已知状态 ID ...

如何从reports-flow.xml 全局创建parameters 视图状态?

什么是更好的方法?

【问题讨论】:

    标签: java spring jsp spring-webflow transitions


    【解决方案1】:

    使用&lt;on-start&gt;&lt;decision-state&gt;将请求参数带入流范围并获取模型:

    <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 不为空,则流程将直接进入参数页面。

    不需要全局转换。

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 1970-01-01
      • 2013-05-31
      • 2023-03-06
      • 1970-01-01
      • 2014-09-05
      • 2012-07-31
      • 1970-01-01
      • 2014-04-24
      相关资源
      最近更新 更多