Ajax 使用commandLink更新作为另一个表的子表的父表

Ajax 使用commandLink更新作为另一个表的子表的父表,ajax,jsf,datatable,jsf-2.2,Ajax,Jsf,Datatable,Jsf 2.2,我有这样的结构: <h:dataTable id="baselist"> <h:dataTable id=childlist"> <p:commandLink update="should only update childlist"> </h:dataTable> </h:dataTable> 请注意,childlist数据表的id中包含一个索引号 例如: 父表第一行中的childlist表的id为::f

我有这样的结构:

<h:dataTable id="baselist">
   <h:dataTable id=childlist">
       <p:commandLink update="should only update childlist">
   </h:dataTable>
</h:dataTable>


请注意,childlist数据表的id中包含一个索引号

例如:

父表第一行中的childlist表的id为:
:form:baselist:0:childlist

父表第二行中的childlist表的id为:
:form:baselist:1:childlist

父表第三行中的childlist表的id为:
:form:baselist:2:childlist

等等

解决方案:

更新父表,以便更新和同步所有内容,包括所有行中的childlist表

例如

update=“:form:baselist”

不相关:


您可以在浏览器中右键单击呈现的页面并查看页面源代码来查看元素的完整限定id。

您可以尝试使用
{component.parent.clientId}
,但您不会获得您认为的那么多

JSF通常会重建整个结构,请参见中的答案:

此外,如果修改了
基本列表
,则会遇到问题,因为
:0,:1
命名容器ID将变得不一致。 e、 g.如果从
基本列表
中删除第一个元素,JSF将用新ID重新创建视图。 所以
:form:baselist:1:childlist'
将变成
:form:baselist:0:childlist


我不确定您是否会出现错误,但肯定这迟早会造成一些痛苦。

您可以尝试
update=“@parent”
是的,我已经尝试过了,而且效果很好;但我的问题是,为什么我不能只更新子表。我试过:
@parent
,它似乎不会更新任何东西;还有完整的限定路径,它给出了无法找到的id异常,尽管我可以看到它是正确的。