Primefaces 嵌套对话框/'appendToBody' - 支持 bean 操作未触发

2024-04-03

我在两个嵌套表单中有一个支持 bean 方法(会话范围),该方法不会触发。

我用一个展示问题的通用示例提出了这个问题。

我希望了解如何/为何使用表单、对话框和appendToBody标签导致了问题。

为了澄清,该行动contentsOfDialogTwo.xhtml - nestedDialogsBean.actionOnClickOfDialogTwoItem()- 不点火。将显示 javascript 警报,但支持 bean 上的操作上的断点显示未调用此警报。

模板视图:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
<ui:composition>
    <ui:insert name="content"/>
</ui:composition>
</html>

家长观点:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<ui:composition template="../templates/layout.xhtml">
    <ui:define name="content">
        <h:form>
            <p:panel>
                <p:tabView id="exampleTabView" dynamic="false">
                    <p:tab id="nestedDialogsTab" title="Nested Dialogs Tab">
                        <ui:insert>
                            <ui:include src="childView.xhtml"></ui:include>
                        </ui:insert>
                    </p:tab>
               </p:tabView>
            </p:panel>
         </h:form>
    </ui:define>
</ui:composition>
</html>

儿童视图:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui">
    <ui:composition>
    <p:commandButton 
    id="openDialog1" 
    value="Open Dialog 1"
    action="#{nestedDialogsBean.actionOnOpenOfDialog1()}"
    oncomplete="dialogOneVar.show()">
     </p:commandButton>
    <p:dialog id="dialogOne" header="Panel One" widgetVar="dialogOneVar"
            resizable="false" modal="true" closable="true" dynamic="true"
            hideEffect="fold" draggable="false" height="700" width="1000">
            <ui:insert>
                <ui:include src="contentsOfDialogOne.xhtml"></ui:include>
            </ui:insert>
        </p:dialog>
    </ui:composition>
    </html>

DialogOne.xhtml 的内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <p:commandButton 
    id="openDialog2" 
    value="Open Dialog 2"
    action="#{nestedDialogsBean.actionOnOpenOfDialog2()}"
    oncomplete="dialogTwoVar.show()">
     </p:commandButton>
    <p:dialog id="dialogTwo"
        header="Dialog Two"
        widgetVar="dialogTwoVar" 
        closable="true"
        dynamic="true" 
            resizable="false" draggable="false" height="700"
        width="1000" hideEffect="fold" appendToBody="true" >
        <ui:insert>
            <ui:include src="contentsOfDialogTwo.xhtml"></ui:include>
        </ui:insert>
    </p:dialog>
</ui:composition>
</html>

contentOfDialogTwo.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<ui:composition>
    <h:form id="innerWrapperFormForDialogTwoDueToAppendToBody">
         <p:commandButton id="actionInsideDialogTwouButton"
         action="#{nestedDialogsBean.actionOnClickOfDialogTwoItem()}"
                onclick="alert('Button clicked')"
                value="Invoke Backing Bean Action">
            </p:commandButton>
</h:form>
</ui:composition>
</html>

切勿使用嵌套表单

appendToBody :将对话框附加为文档正文的子项。

使用它时,对话框的渲染内容将附加到正文中,因此,例如在您的 xhtml 中,对话框被包装为h:form你用appendToBody="true"在生成的页面中,对话框不会被form tag


这在 HTML 中是非法的,并且行为未指定并且取决于所使用的网络浏览器。 ajax 链接不提交表单,它只是通过 JavaScript 收集输入值,然后在后台发送 XMLHttpRequest。为什么 a:commandLink 的操作属性有效但 h:commandLink 的无效? https://stackoverflow.com/a/13078771/617373

JSF 页面中的多个 h:form https://stackoverflow.com/a/7372315/617373

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Primefaces 嵌套对话框/'appendToBody' - 支持 bean 操作未触发 的相关文章

随机推荐

  • iOS setValue withCompletionBlock 未调用

    在设置值时 我遇到了一些在 iOS 模拟器和设备 上未调用的completionBlocks 例如 void addShortUserPlaylistUrl NSString playlistId playlistName NSString
  • Plotly.py:在行之间填充,正/负不同颜色

    使用 Plotly 我可以轻松绘制两条线并填充它们之间的区域 import plotly graph objects as go fig go Figure fig add trace go Scatter x 1 2 3 4 y 1 2
  • 如何将 Git 子模块指针恢复到存储在包含存储库中的提交?

    我的主 git 存储库中有一个 git 子模块 据我了解 主存储库存储一个 SHA 值 某处 指向它 链接到 的子模块的特定提交 我进入我的子模块并输入git checkout some other branch 我不知道我来自哪个提交 我
  • 使用 Python 更新媒体 wiki 文章?

    你好 我有一个 cron 作业 它收集有关服务的一些统计信息 我需要 cron 作业以编程方式更新媒体 wiki 页面 附加到页面 我在 cron 中使用 python 那么我最好的选择是什么 是否有 mediawiki python 库的
  • 数据绑定后如何隐藏gridview列?

    我使用以下链接中的解决方案隐藏我的列 如何隐藏 GridView 中的 TemplateField 列 https stackoverflow com questions 4954871 how to hide a templatefiel
  • 消除重复的 try/catch 代码

    编写必须一次又一次处理相同异常的代码总是很无聊 有没有一种方法可以在不使用try catch的情况下编写代码 并向方法添加属性来捕获 并处理 可能发生的各种异常 这听起来像 AOP Postsharp 这会是理想的解决方案吗 因此 我想编写
  • 如何在protobuf消息中添加int数组

    我必须编写一个 protobuf 消息 它应该有 1 个整数变量和一个整数数组 package protobuf message myProto optional uint32 message id 1 optional int updat
  • 无法读取 Angular 4 中 null 的属性“outlets”

    我有 Angular 4 3 6 项目 其中模板片段产生此错误 模板块 a article title a 错误堆栈跟踪 ArticleSpComponent html 26 ERROR TypeError Cannot read prop
  • Android - 在开发和生产 Web 服务之间切换

    我想让我的应用程序在开发和生产 Web 服务之间切换 而不需要对代码进行太多更改 并且相对简单 现在我的网络服务地址为static final String类中的变量执行实际的 HTTP 调用 并使用 a 来切换应用程序其余部分中的代码st
  • 如何执行作为 sp 参数传递的 sql 文本?

    我有一个带有 nvarchar 参数的存储过程 我希望调用者在使用此 SP 时提供 sql 命令的文本 如何从 SP 内执行提供的 sql 命令 这可能吗 我认为可以使用 EXEC 但以下内容 EXEC script 错误表明无法按给定名称
  • 带有 Base64 图像的 v-card-media

    我正在 ColdFusion 中创建验证码图像 并将其作为 Taffy 的 REST feed 返回 然后在 Vuetify 中显示 ColdFusion 太妃糖代码
  • 如何从Excel中获取工作表名称

    如何从 Excel 获取工作表名称并将其添加到我的组合框列表中 我似乎无法将其添加到我的代码中 因为它是public static public static DataTable ExcelToDataTable string fileNa
  • Consumer.endOffsets 在 Kafka 中如何工作?

    假设我有一个无限期运行的计时器任务 它会迭代 kafka 集群中的所有消费者组 并输出每个组的所有分区的延迟 提交偏移量和结束偏移量 与 Kafka 控制台消费者组脚本的工作方式类似 只不过它适用于所有组 就像是 单个消费者 不工作 不返回
  • 如何在Verilog中将二维数组中的所有位设置为0?

    我构建了一个 8 2bits 数组来表示 Verilog 中的一块内存 reg 1 0 m 0 7 该存储器有一个复位信号 如果复位为1 则该存储器中的所有位都应重置为0 但是我不知道如何以简洁的方式设置m的所有位 因为如果有数百个内存中有
  • 如何防止 WCF 服务进入故障状态?

    我有一个 WCF 服务不应进入故障状态 如果出现异常 则应将其记录下来 并且服务应继续不间断 该服务具有单向操作契约 并且正在从 MSMQ 读取消息 我的问题有两个 该服务似乎正在被吞噬 异常 错误 所以我无法 调试它 我如何获得服务 暴露
  • 从 Google 云端硬盘文件夹中删除旧文件

    我创建了这个脚本来删除 3 个多小时前发布的文件 而且即使最新文件超过 3 小时 也不会被删除 因此该文件夹永远不会为空 我启用了谷歌的高级服务 称为 DRIVE API V2 我激活了一个触发器 每 5 分钟分析一次文件夹 但文件通常不会
  • “此哈希方法尚未发现冲突”是什么意思?

    我的意思是我不需要寻找实际的碰撞 就知道它们的存在 如果没有冲突 那么如何获得固定长度的结果呢 这就是为什么我不明白人们声称 md5 不安全 是什么意思 有人发现了碰撞 或者类似的东西 我唯一能想到的是 碰撞搜索仅查找字典单词 例如 如果
  • 如何知道已保存模型中的输出和输入张量名称

    我知道如何加载已保存的 TensorFlow 模型 但如何知道输入和输出张量名称 我可以使用 tf import graph def 加载 protobuf 文件 然后使用函数 get tensor by name 加载张量 但我如何知道任
  • 如何在 CLion 中运行 SFML,错误未定义引用?

    我是 C 新手 尝试学习游戏编程 我选择 SFML 并在 Jetbrain 的 CLion 上运行并使用 Ubuntu 机器 我按照这个教程SFML 和 Linux http sfml dev org tutorials 2 0 start
  • Primefaces 嵌套对话框/'appendToBody' - 支持 bean 操作未触发

    我在两个嵌套表单中有一个支持 bean 方法 会话范围 该方法不会触发 我用一个展示问题的通用示例提出了这个问题 我希望了解如何 为何使用表单 对话框和appendToBody标签导致了问题 为了澄清 该行动contentsOfDialog