【问题标题】:How to reRender a rich:dataTable which is inside a4j:repeat?如何重新渲染 a4j:repeat 中的 Rich:dataTable?
【发布时间】:2013-06-26 02:53:03
【问题描述】:

我有这样的:

<a4j:repeat value="#{results}" var="hdr" rowKeyVar="idx">
   <rich:dataTable var="item" value="#{results}" id="tbl#{idx}" first="#{idx}" rows="1">
       <a4j:commandButton value="update this table only" reRender="tbl#{idx}" />
   </rich:dataTable>
</a4j:repeat>

当我从输出 html 中检查时,数据表的 id 类似于 form:0:tbl,但最后没有 idx。

当结果中只有一行时,重新渲染将起作用。

所以这里有一些问题:

  1. 为什么 dataTable 的 id 不能与 EL 表达式一起使用,而“first”属性却很好用?
  2. reRender 是如何工作的,即使我只指定了 tbl,它仍然可以解析,而实际的 HTML id 更长,例如 form:0:tbl? (如果我知道 reRender 是如何工作的,我也许可以破解它以使用 a4j:repeat...)
  3. 是否有任何技术或解决方法可用于仅刷新 a4j:repeat 中的特定数据表?

事实上,我已经成功地重新渲染了被 s:div 包围的整个 a4j:repeat 块。但是刷新整个块会重置滚动条,所以它是不需要的......

【问题讨论】:

    标签: ajax jsf datatable richfaces uirepeat


    【解决方案1】:

    对于1,有可能表的生命周期处于不同的阶段。

    对于 2,它实际上是指 UIComponent.findComponent 用于查找给定 ID 的组件。

    对于 3,或许可以尝试使用 UIComponent.findComponent() 或 #{rich:clientId('id')} 来查看是否要检索到的 a4j:repeat 嵌入的rich:dataTable 的实际 HTML 元素 ID。

    如果是,那么可以使 reRender 以某种方式工作。如果不是,请查看是否有任何东西可以覆盖 reRender 查找组件的方式。

    【讨论】:

      【解决方案2】:

      好的最新实验表明,只需使用rich:dataTable id 即可。

      要记住的关键:

      1. 在 a4j:repeat 中,dataTable 的 id 的绝对名称将类似于 :0: :1: 对应的索引。
      2. 但是,要找到它,只需使用与 rich:dataTable 中定义的相同的 id 即可。不要在末尾附加任何后缀。
      3. 从 Chrome 观察 ajax 数据时,reRendered 部分与组件的相关数据表相同。

      结论,想太多,一开始没有尝试最简单的解决方案。

      【讨论】:

        猜你喜欢
        • 2011-08-28
        • 2011-11-05
        • 2011-04-20
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 2013-11-15
        • 2020-02-13
        相关资源
        最近更新 更多