gpt4 book ai didi

spring-webflow - Spring Webflow - 如何获取 FLOW ID 列表

转载 作者:行者123 更新时间:2023-12-04 00:36:23 26 4
gpt4 key购买 nike

获取 Spring Webflow 生成的 FLOW ID 完整列表的最佳方法是什么?

这是我的配置:

<webflow:flow-registry id="flowRegistry" 
flow-builder-services="flowBuilderServices"
base-path="/WEB-INF/pageFlows">
<webflow:flow-location-pattern value="/**/*-flow.xml"/>
</webflow:flow-registry>

[更新 1] 我应该澄清一下,我想在 Java 代码中执行此操作,而不是通过检查我的配置。

[更新 2] 答案:requestContext.getActiveFlow().getApplicationContext()

最佳答案

流 ID 列表可以通过它们在流注册表中定义的方式来识别。默认情况下,流将被分配等于其文件名减去文件扩展名的注册表标识符,除非定义了注册表基本路径。

让我用例子来解释一下:

场景 1:未指定流位置和基本路径:

    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices">
<webflow:flow-location path="/WEB-INF/pageFlows/example.xml" />
</webflow:flow-registry>

流 id:示例

场景 2:未指定流位置模式和基本路径:

    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices">
<webflow:flow-location-pattern value="/WEB-INF/pageFlows/**/*-flow.xml"/>
</webflow:flow-registry>

如果您有类似/WEB-INF/pageFlows/example1-flow.xml、/WEB-INF/pageFlows/example2-flow.xml 的流,则流 ID 分别为:example1-flow、example2-flow。

场景 3:指定你自己的id:

    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices">
<webflow:flow-location path="/WEB-INF/pageFlows/example.xml" id="myExampleId" />
</webflow:flow-registry>

流 ID:myExampleId

场景 4:指定了基本路径:

    <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="/WEB-INF">
<webflow:flow-location path="/pageFlows/example.xml" />
</webflow:flow-registry>

流现在将被分配注册表标识符,等于它们的基本路径和文件名之间的路径段。流 id:pageFlows

场景 5:指定流位置模式和基本路径:

    <webflow:flow-registry id="flowRegistry" base-path="/WEB-INF">
<webflow:flow-location-pattern value="/**/*-flow.xml" />
</webflow:flow-registry>

流现在将被分配注册表标识符,等于它们的基本路径和文件名之间的路径段。因此,如果您的流位于 WEB-INF 中的/pageFlows1/example1、/pageFlows2/example2 目录中,则流 ID 分别为:pageFlows1、pageFlows2。

编辑:

以编程方式获取流 ID:

假设您的流 Controller 和流执行器在 webflow-config xml 文件中定义如下:

    <bean name="flowController" class="org.springframework.webflow.executor.mvc.FlowController">
<property name="flowExecutor" ref="flowExecutor" />
</bean>
//flowRegistry is alredy mentioned in your question
<flow:executor id="flowExecutor" registry-ref="flowRegistry">
<flow:repository type="continuation" max-conversations="1" max-continuations="30" />
</flow:executor>

您可以检索如下注册的流定义 ID:(我从一个扩展了 AbstractController 的 Controller 调用它,这就是为什么你看到 getServletContext() 方法)

    ApplicationContext context = 
(ApplicationContext)getServletContext().getAttribute(
DispatcherServlet.SERVLET_CONTEXT_PREFIX + "yourWebContextName");
FlowController controller = (FlowController)context.getBean("flowController");
FlowExecutorImpl flowExecutorImpl = (FlowExecutorImpl)controller.getFlowExecutor();
FlowDefinitionRegistryImpl flowDefinitionRegistryImpl = (FlowDefinitionRegistryImpl)flowExecutorImpl.getDefinitionLocator();
//Assuming you have log configured
log.info("Registered Flow Ids are:"+flowDefinitionRegistryImpl.getFlowDefinitionIds());

FlowController 可以访问 FlowExecutor(webflow 的初始入口点)。 FlowExecutor 可以访问 flowDefinitionRegistry,所有流在服务于请求之前都在其中注册。

希望这对您有所帮助。

关于spring-webflow - Spring Webflow - 如何获取 FLOW ID 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com