如何阻止递归复合组件递归地包含自身

2023-12-07

是否可以有一个具有 ui:repeat 的 JSF 组件,并且在重复中调用相同的组件?这是因为我正在构建问题树:

<cc:interface>
    <cc:attribute name="questions" required="true" />
    <cc:attribute name="renderQuestions" required="true" default="true" />
</cc:interface>

<cc:implementation>

    <c:if test="#{cc.attrs.renderQuestions}">
        <ui:repeat value="#{cc.attrs.questions}" var="q">
            <p:panelGrid columns="2">
                <h:outputLabel value="#{q.question}"></h:outputLabel>
                <p:selectBooleanButton onLabel="#{messages['commons.yes']}"
                    offLabel="#{messages['commons.no']}" onIcon="ui-icon-check"
                    offIcon="ui-icon-close" value="#{q.ok}">
                    <p:ajax update="@all"></p:ajax>
                </p:selectBooleanButton>
            </p:panelGrid>

            <cf:question renderQuestions="#{q.ok}" questions="#{q.children}" />

        </ui:repeat>
    </c:if>

</cc:implementation>

目前我遇到了 stackoverflow?


使用视图构建时间标记而不是视图渲染时间标记来停止递归。组件树是在视图构建期间构建的。这rendered属性不会在视图构建时评估,而是在视图渲染时评估。所以你的构造基本上保持将自身包含在无限循环中。你应该已经知道了StackOverflowError是由深度递归导致内存堆栈无法再处理的(通常大约 1000 次迭代)。

Replace <h:panelGroup rendered> by a <c:if test>它会按预期工作。这renderQuestions顺便说一句,可以通过省略对儿童的检查来简化。这<ui:repeat>如果没有孩子,无论如何都不会渲染任何东西。

如果您碰巧在此构造中使用视图作用域 bean 并且正在使用 Mojarra 实现,那么请确保您至少升级到 2.1.18,因为在旧版本中将视图构建时间标记属性绑定到视图作用域 bean 属性打破视图范围。

也可以看看:

  • JSF2 Facelets 中的 JSTL...有意义吗?- 解释“视图构建时间”与“视图渲染时间”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何阻止递归复合组件递归地包含自身 的相关文章

随机推荐

  • 如何在母版页标题中包含jquery而不出现路径问题?

    我已经尝试过这个 scripts jquery 1 5 1 min js gt gt
  • 是否可以通过 url 将文件上传到应用程序引擎上的云存储而不写入磁盘?

    要将文件从url上传到云存储系统 通常需要将该文件下载到服务器上 然后将其上传到云存储 对于大文件 可能需要将文件写入磁盘而不是内存 由于应用程序引擎不支持在磁盘上写入 因此还有其他选项可以在应用程序引擎上执行此操作吗 我知道托管虚拟机是一
  • 无法在 WinForms 设计器中选择 Infragistics 控件

    我刚刚升级了 2006 年至 2011 年一个项目的 Infragistics 控件 现在 如果我打开包含任何 Infragistics 控件的表单的设计器 Infragistics 控件将显示在表单设计器下方的单独面板中 并且我无法在设计
  • CTR 中的 AES 如何与 PyCrypto 一起用于 Python?

    我正在使用 python 2 7 1 我想在 CTR 模式下使用 AES 进行加密 我为 python 安装了 PyCrypto 库 我写了以下代码 secret os urandom 16 crypto AES new os urando
  • 如何使用本地构建的 nuget 包进行调试?

    我们有几个项目使用共享的公共库 内部的 非公共的 C net 项目 使用 Visual Studio 设置作为解决方案 Solution A gt Common Library Nuget Package Solution B 一般来说 这
  • 单击按钮 Javascript 即可触发文件下载,其中包含 DOM 中的内容

    我想下载一个从 DOM 元素创建的文件 因此 用户单击网页上的按钮 它会调用 JavaScript 方法 该方法可以获取 DOM 元素的内容并提示用户下载 我能够获取 Javascript Var 中 DOM 元素的内容 但不确定如何进一步
  • 在当前 HTTPContext 中生成新的 ASP.NET 会话

    对我们正在开发的一些产品进行渗透测试的结果是 当时看似 容易 解决的问题却变得棘手 当然不是应该的 我的意思是为什么会这样为当前生成一个全新的会话HTTPContext有那么难吗 奇怪 不管怎样 我写了一个厚颜无耻的小实用程序类来 就这么做
  • Android 切换按钮自定义外观

    我一直在尝试自定义切换按钮的外观 但没有成功 这是我想要的样子 有人可以给我一个教程吗 在res drawable中创建toggle selector xml
  • 为什么 JSON.parse("string") 失败

    根据JSON规范字符串是合法的 JSON 值 那么为什么会发生这种情况呢 你实际上是在传递赤裸裸的话语string到函数中 这当然不是有效的 JSON 要真正传递value string 你需要小心你的 JavaScript 尝试这个 JS
  • 查看完整网站,而非 iPhone 上的移动版本

    我有一个脚本可以检测您是否是 iPhone 用户并重定向到对 iPhone 更友好的页面 这很好用 但有一个问题 惯例是让用户能够查看full网页 但是 如果我链接到根目录 显然重定向会将它们发送到移动版本 有关如何包含的任何想法 请点击以
  • 将多行数据合并到一列中

    我有一个这样的数据 year Male 1 2011 8 2 2011 1 3 2011 4 4 2012 3 5 2012 12 6 2012 9 7 2013 4 8 2013 3 9 2013 3 我需要将 2011 年的数据分组到一
  • 如何在“func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode”中旋转 SCNNode?

    因此 我能够在锚点位置放置一个盒子节点 现在 如何旋转场景中的 SCNNode 我试图修改节点的变换和 eulerAngles 但它们没有效果 func renderer renderer SCNSceneRenderer nodeFor
  • 位图图像处理

    我想使用 LockBits 方法替换 GetPixel 和 SetPixel 所以我遇到了这个F 惰性像素读取 open System Drawing open System Drawing Imaging let pixels image
  • Xquery 中的标记化

    如何标记特殊字符 例如 and 在 xquery 正如我正在努力Tokenize这些特殊字符 我无法做到这一点 你能建议我解决这个问题吗 您必须像在 XML 中一样转义 符号 tokenize string amp 或者 您也可以使用它的
  • 通过触摸或手势识别移动 RecyclerView

    我正在尝试移动和扩展 RecyclerView 以便内容在触摸输入的基础上占据全屏 我希望 RecyclerView 保持左右滚动的能力 我无法让 GestureDetector 与 RecyclerView 一起正常工作 捕获 onScr
  • iOS:在 uiimage 上具有发光/阴影效果的羽毛

    我正在尝试找到一种方法来应用带有阴影的羽毛效果UIImage not UIImageView我在iOS上遇到过 目前还没有找到完美的解决方案 我有一个想法 这可以通过屏蔽来完成 但我对这很陌生CoreGraphics 如果有人可以帮忙的话
  • 使用 django:代理设置

    我有一个使用 apache 的本地开发 django 设置 问题是 在部署服务器上没有代理 而在我的工作场所 我在 http 代理后面工作 因此请求调用失败 有没有什么方法可以使请求库中的所有调用都通过代理进行 我知道如何使用代理参数向各个
  • Spring事务通过连接多个数据库

    我正在尝试开发一个小程序 在该程序中我可以使用 Spring 连接到多个数据库 并尝试通过在 weblogic 服务器上部署我的 Web 应用程序来使用 Spring 事务 问题是事务管理无法正常工作 我试图在两个数据库中插入记录 第一个数
  • Identity Core 主键为 Int 无法使用 SignInManager

    我想做的是 使用 Identity Core 设置登录 注销 主键为 Int 我按照 ASP NET Core 文档中的以下文章进行操作 配置身份主键数据类型 他们使用 GUID 但想法是相同的 设置非常成功 ID 是整数并且数据库正在填充
  • 如何阻止递归复合组件递归地包含自身

    是否可以有一个具有 ui repeat 的 JSF 组件 并且在重复中调用相同的组件 这是因为我正在构建问题树