我不认为 webflow 父级 -> 子流转换是为此类问题而设计的。 Web 流程假设您正在从页面 -> 页面进行转换。最好的选择是在弹出窗口初始化为父/主流程中定义的特定转换时进行 ajax/javascript 调用,并将要执行的逻辑放置在转换中。您可以将 Spring Webflow 配置为返回仅由您的 javascript 代码呈现的 html 片段。
这是我的一个项目的示例。
<view-state id="edit" view="flows/s/#{flowScope.modelPathName}/v/edit" model="modelObj">
<!-- NOTE: Inheriting flow must implement its own specific binding
<binder>
<binding property="name" />
<binding property="description" />
</binder>
-->
<transition on="saveModel" to="chkLocalmodelObjDiff"/>
<transition on="cancelSave" to="cancelEdit" bind="false"/>
<transition on="objUnlink">
<set name="flashScope.viewResponse" value="pbmService.removeObjRelationship(requestParameters.objId,requestParameters.objName,modelObj)"/>
<render fragments="view_response_msg" />
</transition>
所以在上面的例子中,我们处于“父/主”流程中。 “objUnlink”转换可以由如下所示的 html 链接触发。
(sudo 代码网址):
${flowExecutionUrl}?_eventId='objUnlink'&someOtherParam=2
触发转换所需的参数为:“_eventId=objUnlink”
或者通过 ajax 调用,其中 url 的结构如下:
(sudo 代码网址):
${flowExecutionUrl}?_eventId='objUnlink'&someOtherParam=2&ajaxSource=true
通过 ajax 触发转换所需的 PARAM 为:“_eventId=objUnlink” and “ajax源=真”
因为我们有:
<render fragments="view_response_msg" />
触发任一 URL 只会呈现视图定义的“view_response_msg”片段。就我而言,我使用 thymeleaf 作为视图框架,“view_response_msg”被定义为 thymeleaf 中的片段。
因此,在发送请求并执行转换后,我的响应正文将仅包含在“view_response_msg”中定义的呈现的 html(而不是整个页面)。
因此,对于您的用例,您应该:
在视图框架中定义一个片段,该片段将仅呈现弹出窗口的内容。为了与我们的示例保持一致,将其称为“view_response_msg”
然后通过 AJAX 调用父/主流程上的特定转换。再次为了保持一致,将其称为“objUnlink”
然后将这个部分渲染的 html 响应存储在 javascript 变量中(记住我们从 ajax 调用调用此转换),然后将其显示在弹出窗口中。
如果您想在某人关闭弹出窗口时更新父/主流程,请使用相同的概念并创建另一个 ajax 调用 -> 转换 -> 片段渲染。请记住,我们还没有离开主流。
抱歉回答太长,但这不是一个小问题:)
Note:Spring Web Flow 必须明确配置为处理 ajax 请求。请参阅文档。此外,您的特定视图框架(例如 thymeleaf)可能有其自己的特定配置/实现,用于 Web Flow 处理 ajax 请求和渲染片段。