如何在子流程中包含弹出对话框
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(而不是整个页面)。
因此对于您的用例,您应该:
在您的视图框架中定义一个仅呈现弹出窗口内容的片段 window。为了与我们的示例保持一致,将其称为 'view_response_msg'
然后通过 AJAX 在 parent/main 流上调用特定转换。再次保持一致将其称为 'objUnlink'
然后将这个部分呈现的 html 响应存储在一个 javascript 变量中(记住我们从 ajax 调用中调用了这个转换)然后将它显示在你的 pop 中向上。
如果您想在有人关闭弹出窗口时更新 parent/main 流程,请使用相同的概念并创建另一个 ajax 调用 -> 转换 -> 片段渲染。记住我们还没有离开主流。
很抱歉回答很长,但这不是一个小问题:)
注意: Spring Web Flow 必须明确配置为处理 ajax 请求。请参阅文档。此外,您的特定视图框架可能(例如 thymeleaf)具有自己特定的 configuration/implementation 供 Web Flow 处理 ajax 请求和呈现片段。
有没有办法在子流状态下调用对话框,使背景(当前流)被禁用?
这样当子流结束时(关闭弹出对话框后),它可以更新父流(当前页面)。
我正在尝试通过子流程实现如下图所示的效果:
更新:
最后我在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(而不是整个页面)。
因此对于您的用例,您应该:
在您的视图框架中定义一个仅呈现弹出窗口内容的片段 window。为了与我们的示例保持一致,将其称为 'view_response_msg'
然后通过 AJAX 在 parent/main 流上调用特定转换。再次保持一致将其称为 'objUnlink'
然后将这个部分呈现的 html 响应存储在一个 javascript 变量中(记住我们从 ajax 调用中调用了这个转换)然后将它显示在你的 pop 中向上。
如果您想在有人关闭弹出窗口时更新 parent/main 流程,请使用相同的概念并创建另一个 ajax 调用 -> 转换 -> 片段渲染。记住我们还没有离开主流。
很抱歉回答很长,但这不是一个小问题:)
注意: Spring Web Flow 必须明确配置为处理 ajax 请求。请参阅文档。此外,您的特定视图框架可能(例如 thymeleaf)具有自己特定的 configuration/implementation 供 Web Flow 处理 ajax 请求和呈现片段。