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

标签 jsf dialog spring-webflow

有没有办法在子流状态中调用对话框,以便禁用背景(当前流)?

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

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

enter image description here

更新:

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

<render fragments="dialogContent"/>

最佳答案

我不认为 webflow parent -> subflow transitions 是为这样的问题设计的。 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 代码 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 定义的“view_response_msg”片段。在我的例子中,我使用 thymeleaf 作为我的 View 框架,'view_response_msg' 被定义为 thymeleaf 中的一个片段。

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

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

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

  2. 然后通过 AJAX 在父/主流程上调用特定的转换。再次保持一致将其称为“objUnlink”

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

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

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

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

关于jsf - 如何在子流程中包含弹出对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000963/

相关文章:

java - 在 Glassfish 3 上部署 JSF 应用程序

jsf - 如何将响应大小和时间插入页面本身,至少部分?

jsf - java.lang.Boolean 无法转换为 javax.faces.model.SelectItem

javascript - 从刚刚检索到的 id 获取 Google Doc

dialog - 打开目录时在 Electron Dialog/showOpenDialog 中显示文件

javascript - Jquery确认框

php - php语言的Webflow

java - Spring Webflow : How to pass a bean from a controller to a flow?(使用输入映射)

c# - 如何在WPF窗口中隐藏关闭按钮?

java - 使用表达式的 Spring Web Flow ExternalRedirect