如何在子流程中包含弹出对话框

How to include a pop-up dialog box in subflow

有没有办法在子流状态下调用对话框,使背景(当前流)被禁用?

这样当子流结束时(关闭弹出对话框后),它可以更新父流(当前页面)。

我正在尝试通过子流程实现如下图所示的效果:

更新:

最后我在webflow中使用了以下代码来动态生成对话框:

<render fragments="dialogContent"/>

我不认为 webflow parent -> subflow transitions 是为这样的问题设计的。 Web 流程假定您正在从页面过渡 -> 页面。最好的办法是在弹出窗口 window 初始化为 parent/main 流中定义的特定转换时调用 ajax/javascript 并将要在转换中执行的逻辑放入。您可以将 Spring Webflow 配置为 html 的 return 片段,这些片段只会由您的 javascript 代码呈现。

这是我的一个项目中的示例。

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

所以在上面的示例中,我们处于 "parent/main" 流程中。 "objUnlink" 转换可以由看起来像这样的 html link 触发。

(sudo 代码 url):

${flowExecutionUrl}?_eventId='objUnlink'&someOtherParam=2

触发转换所需的参数是:"_eventId=objUnlink"

或通过 ajax 调用,其中 url 的结构如下:

(sudo 代码 url):

${flowExecutionUrl}?_eventId='objUnlink'&someOtherParam=2&ajaxSource=true

通过 ajax 触发转换所需的参数是: "_eventId=objUnlink""ajaxSource=true"

因为我们有:

<render fragments="view_response_msg" />

触发 url 将仅呈现您的视图定义的 'view_response_msg' 片段。在我的例子中,我使用 thymeleaf 作为我的视图框架并且 'view_response_msg' 被定义为 thymeleaf 中的一个片段。

因此,在发送请求并执行转换后,我的响应正文将仅包含在我的 'view_response_msg' 中定义的呈现的 html(而不是整个页面)。

因此对于您的用例,您应该:

  1. 在您的视图框架中定义一个仅呈现弹出窗口内容的片段 window。为了与我们的示例保持一致,将其称为 'view_response_msg'

  2. 然后通过 AJAX 在 parent/main 流上调用特定转换。再次保持一致将其称为 'objUnlink'

  3. 然后将这个部分呈现的 html 响应存储在一个 javascript 变量中(记住我们从 ajax 调用中调用了这个转换)然后将它显示在你的 pop 中向上。

  4. 如果您想在有人关闭弹出窗口时更新 parent/main 流程,请使用相同的概念并创建另一个 ajax 调用 -> 转换 -> 片段渲染。记住我们还没有离开主流。

很抱歉回答很长,但这不是一个小问题:)

注意: Spring Web Flow 必须明确配置为处理 ajax 请求。请参阅文档。此外,您的特定视图框架可能(例如 thymeleaf)具有自己特定的 configuration/implementation 供 Web Flow 处理 ajax 请求和呈现片段。