如何reRender富有:在a4j里面的dataTable:重复?

时间:2013-06-28 10:43:38

标签: ajax jsf datatable richfaces uirepeat

我是这样的:

<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。

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

所以这里有一些问题:

  1. 为什么dataTable的id不能与EL表达式一起使用,而“first”属性可以正常工作?
  2. reRender是如何工作的,即使我只是指定tbl它仍然可以解析,而实际的HTML id更长的形式:0:tbl? (如果我知道reRender如何工作,我可能会破解它与a4j一起工作:重复......)
  3. 我是否可以使用任何技术或解决方法来刷新a4j中的特定dataTable:repeat?
  4. 实际上我已成功重新整理了整个a4j:s:div包围的重复块。但刷新整个块会重置滚动条,所以不希望....

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

要记住的关键:

  1. 在a4j内:重复一遍,dataTable的id的绝对名称将为:0 :: 1:表示相应的索引。
  2. 但是,要找到它,只需使用与rich:dataTable中定义的相同的id即可。不要在最后添加任何后缀。
  3. 当观察来自Chrome的ajax数据时,reRendered部分与该组件的相关dataTable相同。
  4. 结论,想得太多,未能在开始时尝试最简单的解决方案。