Ajax 如何重新提交a4j:repeat中的rich:dataTable?

Ajax 如何重新提交a4j:repeat中的rich:dataTable?,ajax,jsf,datatable,richfaces,uirepeat,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}" /

我有这样的东西:

<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中进行检查时,数据表具有类似于表单0:tbl的id,其末尾没有idx

当结果中只有一行时,重新渲染器将工作

下面是一些问题:

  • 为什么dataTable的id不能与EL表达式一起工作,而“first”属性可以很好地工作
  • reRender是如何工作的,即使我只指定了tbl,但它仍然可以被解析,而实际的HTML id更长一些,比如表单:0:tbl?(如果我知道reRender是如何工作的,我也许可以将它与a4j一起使用:重复…)
  • 是否有任何技术或解决方法可用于仅刷新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即可

    要记住的关键点:

  • 在a4j:repeat中,对应索引的dataTable的id的绝对名称类似于:0::1:
  • 但是,要定位它,只需使用rich:dataTable中定义的相同id即可。不要在结尾附加任何后缀
  • 当观察来自Chrome的ajax数据时,重新提交的部分与组件的相关dataTable相同
  • 结论:想得太多,一开始没能尝试最简单的解决方案