如何使用 JSTL 在 JSF 1.2 页面中强制构建阶段?

2023-12-26

我在 JSF 应用程序中使用 JSTL 标签。通过某些操作,我需要重建组件树,就像它是初始构建一样。我当前的症状是对象与组件关联不正确、重复的 ID 以及陈旧组件的其他问题。这是使用在构建阶段使用的 c:foreach (不能使用重复标记,请参阅示例链接)标记。

我的理解是,可以强制重建,但我无法找到在哪里或如何发生这种情况。我对在客户端或服务器上启动的解决方案持开放态度。

有关我正在使用的代码示例,请参阅 Richfaces 动态选项卡上的此页面。http://in.relation.to/Bloggers/UsingDynamicallyCreatedRichFacesTabPanelForSearchResults http://in.relation.to/Bloggers/UsingDynamicallyCreatedRichFacesTabPanelForSearchResults

注意:使用 ui:repeat 或 a4j:repeat 是不可行的。有关详细信息,请参阅示例页面。

其他注意事项:应用程序 bean 是会话范围的,其中的数据也需要是会话范围的,只是组件树状态不是这样。

Update这个问题直接针对提出的问题本文 http://drewdev.blogspot.com/2008/08/cforeach-with-jsf-could-ruin-your-day.html和第一条评论。我不知道如何实际执行第一条评论中的解决方法,而接受的答案引导我找到了它。


我不认为陈旧的组件是问题所在。重复的 ID 尤其是使用<c:forEach>标签。这是因为<c:forEach>会多次将任何子组件添加到组件树中,并且每次都会尝试使用相同的 ID(与<ui:repeat>)。这显然会导致重复的 ID(您会注意到在链接到的示例中,他们没有在<c:forEach> tags).

我不确定“视图构建阶段”是什么意思。如果你看一下JSF 文档 http://download.oracle.com/javaee/6/tutorial/doc/bnaqq.html,你会发现没有这样的阶段。无论如何,当您使用<ui:repeat>,只要您用来执行搜索的 AJAX 调用重新呈现rich:tabPanel那么它应该可以工作。

他们引用的理由是<ui:repeat>不工作的是:

您不能为此使用重复组件(ui:repeat 和 a4j:repeat)因为它们在页面渲染期间工作并且不在 JSF 树中创建组件,而只是迭代同一个实例。

在他们的例子中,他们使用了:

...
<a4j:commandButton action="#{capitalsBean.search}" value="Search" reRender="output" id="search"/>
...
<a4j:outputPanel id="output">
    <rich:tabPanel id="tapPanel" width="700" rendered="#{not empty capitalsBean.foundCapitals}">
        <c:forEach items="#{capitalsBean.foundCapitals}" var="cap">
        ...

如果您指定reRender="output"在搜索的a4j:commandButton如何不发生“页面渲染时间”tapPanel??

总而言之,使用<ui:repeat>、JSTL 和 JSF 通常不是很好的同床异梦。

EDIT:我应该先这样做,因为我没有经验rich:tabPanel but <ui:repeat>,看来不能与rich:tabPanel(但不是出于您链接的示例中所述的原因,因此我很困惑)。不要使用<c:forEach>不过,使用组件绑定到rich:tabPanel.

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

如何使用 JSTL 在 JSF 1.2 页面中强制构建阶段? 的相关文章

随机推荐

  • 在 SSL 证书主题字段中添加 ID

    我想知道是否有一种简单的方法可以在创建 SSL 证书时自动生成 全局 唯一 ID 并将其添加到主题字段中 查看 OpenSSL bash 命令 示例将会很有帮助 something along the lines of this 首先 主题
  • 在 Jersey 1.18.1 请求过滤器中获取资源注释

    我正在实现一个用户授权模块 该模块将使用 新 注释应用于资源方法 为此 我创建了一个 Jersey 请求 过滤器 我需要在其中获取注释以允许 禁止资源操作 我正在使用 Dropwizard 0 7 1 和 Jersey 1 18 1 资源类
  • 如何在 UNIX 中创建新的环境变量......?

    如何在unix中创建新的环境变量并在程序中使用它 你可以知道你正在运行什么 shellps o comm p 我认为这或多或少是普遍的 所以 在 bash 和某些类似的 shell 中 如果您想为一次特定运行创建变量 您可以这样做 MYVA
  • 如何构建我的 Express 应用程序,只需要打开 mongodb 连接一次?

    注意 请在回答之前阅读这篇文章的编辑部分 它可能会节省您的时间并回答我的问题之一 我遇到的问题非常简单 但我对整体来说还很陌生 并且在弄清楚如何在节点 express 应用程序中正确实现 mongodb 数据库连接时遇到问题 我正在使用 E
  • 管道缓冲区保留直到处理完成

    我正在研究使用管道处理来自网络的二进制消息的可能性 我将处理的二进制消息带有有效负载 并且希望将有效负载保持为二进制形式 这个想法是读出整个消息并创建一个消息片及其有效负载 一旦消息被完全读取 它将被传递到通道链进行处理 处理不会是即时的
  • 在 rgdal R 中使用 spTransform 重新投影空间点时出错

    G day 我在 CRS 澳大利亚大地基准 66 84 为了简洁起见 AGD66 中有大量经 纬度坐标 我想将这些坐标从 AGD66 更改为 WGS84 因为它们之间大约有 200m 的差异 而且我在 WGS84 中有其他坐标和图层 我尝试
  • PHP 计算对象属性出现次数

    我有一个如下所示的 PHP 对象 我想知道获取属性 typeId 3 的对象计数的最简单方法是什么 Array 0 gt ABC Object id gt 13 typeId gt 3 sortOrder gt 0 1 gt ABC Obj
  • 在python中添加atom中的模块

    我的计算机上安装了 pygame 和 tkinter 模块 但我无法找到如何在文本编辑器 Atom 中访问它们 我可以在 IDLE 中使用它们 import pygame 但是当我尝试将其导入atom 时 它无法识别该模块 有人知道为什么吗
  • Firefox 是否支持表格元素上的position:relative?

    当我尝试使用时position relative position absolute on a th or td 在 Firefox 中它似乎不起作用 简单且最正确的方法是将单元格的内容包装在 div 中并添加相对于该 div 的位置 ex
  • .net core razor 页面中的多个视图组件未正确绑定

    我正在使用 razor 页面创建一个 net core 5 Web 应用程序 并且正在努力将我创建的视图组件绑定到我的页面 如果我在页面上有多个相同的视图组件 以下完美运行 我的页面 cshtml page model MyPageMode
  • 多个邮件附件 - PhoneGap

    您好 我正在phonegap中做一个应用程序 它需要有多个附件 但我无法有多个附件 任何解决方案 我的代码如下
  • 使用单个函数调用写入多个文件描述符

    我有一个群聊服务器的用例 其中服务器必须向所有客户端的套接字写入一个公共字符串 然后 我通过循环遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题 现在我正在考虑寻找更好的解决方案 是否可以通过使用 Linux 中的 tee 系统
  • 在 Swift 3.0 中转换 base64String 中的音频文件

    我正在使用以下代码录制音频文件 let audioFilename getDocumentsDirectory appendingPathComponent tt mp4 let settings AVFormatIDKey Int kAu
  • 修改多维 numpy 数组中的对角线

    我有一个形状为 7 3 7 3 的多维 numpy 数组 我想修改轴 0 和轴 2 重合的广义对角线 这个广义对角线将被定义为数组中第 0 个和第 2 个索引重合的元素 并且形状为 3 3 7 Doing arr diagonal axis
  • 在 Vbscript 中终止进程

    我试图终止名为 AetherBS exe 的进程的所有实例 但以下 VBscript 不起作用 我不太确定在哪里 为什么会失败 那么我怎样才能杀死 AetherBS exe 的所有进程呢 CloseAPP AetherBS exe Func
  • Boost.Spirit 将表达式转换为 AST

    使用 Boost Spirit 将某些表达式转换为 AST 的正确方法是什么 我尝试构建它 但我认为它很混乱 可以简化很多 https godbolt org z VXHXLY https godbolt org z VXHXLY incl
  • 调试非托管 Neo4j 扩展

    我刚刚开始使用 Graphaware 框架为 Neo4j 服务器开发一个非托管扩展 到目前为止一切都很好 甚至单元测试也有效 但我想实际调试从 Intellij 内部运行 Neo4j 服务器的扩展 有人能给我一个关于如何做到这一点的提示吗
  • Spring Batch 多数据源和 ChainedTransactionManager 风险

    我正在研究由两个数据源组成的 Spring Batch 的可行性 用于 Spring Batch 元数据的 SQL 数据源和用于业务数据的 MongoDB 数据源 具有事务性用途 交易方面在这里提出了几个问题 以下主题 使用 MongoDB
  • 让 Django 走向绿色

    我有一个 Django 管理命令 可以发出数千个 TCP UDP 请求 我使用 Gevent 来加快速度 因为我重组了代码以作为协程工作 套接字连接不再阻塞 但从我读到的内容来看 Django 的某些部分仍然不是绿色的 我所说的绿色 是指使
  • 如何使用 JSTL 在 JSF 1.2 页面中强制构建阶段?

    我在 JSF 应用程序中使用 JSTL 标签 通过某些操作 我需要重建组件树 就像它是初始构建一样 我当前的症状是对象与组件关联不正确 重复的 ID 以及陈旧组件的其他问题 这是使用在构建阶段使用的 c foreach 不能使用重复标记 请