如何重新渲染a4j:repeat中的rich:dataTable



我有这样的东西:

<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的表单:0:tbl,其末尾没有idx。

当结果中只有一行时,reRender将起作用。

因此,以下是一些问题:

  1. 为什么dataTable的id不能与EL表达式一起工作,而"first"属性却能很好地工作
  2. reRender是如何工作的,即使我只指定tbl,它仍然可以被解析,而实际的HTML id是类似于0:tbl的格式?(如果我知道reRender是如何工作的,我也许可以破解它来使用a4j:重复…)
  3. 有没有什么技术或解决方法可以用来只刷新a4j:repeat中的特定数据表

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

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

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

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

如果是,那么可以以某种方式重新渲染。如果没有,请查看是否有任何内容可以覆盖reRender查找组件的方式。

好的,最新的实验表明,简单地使用rich:dataTable-id就可以了

要记住的关键:

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

结语,想多了,一开始没能尝试最简单的解决方案。

相关内容

  • 没有找到相关文章

最新更新