我有这个结构:
<h:dataTable id="baselist">
<h:dataTable id=childlist">
<p:commandLink update="should only update childlist">
</h:dataTable>
</h:dataTable>
我已经尝试了我能想到的一切,但我只得到错误,说childlist
找不到。这种方式不能更新吗?
您可以尝试使用#{component.parent.clientId}
,但不会获得您想象的那么多。
JSF 通常会重建整个结构,请参阅以下答案:如果 Ajax 从一个表单触发并更新另一个表单,Facelets 会重建整个页面吗?
另外,如果你修改baselist
了 ,那么你会遇到问题,因为:0,:1
命名容器 id 会变得不一致。例如,如果您从 中删除第一个元素baselist
,JSF 将使用新的 id 重新构建视图。所以:form:baselist:1:childlist'
会变成:form:baselist:0:childlist
等。
我不确定您是否会遇到错误,但可以肯定的是,这迟早会引起一些痛苦。
请注意,childlist 数据表的 id 中包含一个索引号。
例如。:
父表第一行childlist表的id为::form:baselist:0:childlist
父表第二行的childlist表的id为::form:baselist:1:childlist
父表第三行childlist表的id为::form:baselist:2:childlist
等等...
解决方案:
更新父表,以便更新和同步所有内容,包括所有行中的子表
例如。
update=":form:baselist"
未实现:
您可以通过在浏览器中右键单击呈现的页面并查看页面源来查看元素的完整限定 ID。