我有这个结构:
<h:dataTable id="baselist">
<h:dataTable id=childlist">
<p:commandLink update="should only update childlist">
</h:dataTable>
</h:dataTable>
我已经尝试了所有我能想到的东西,但我只是错误地说找不到childlist
。是不是可以这样更新?
答案 0 :(得分:0)
请注意,子列表数据表的id中包含索引号。
<强>例如:强>
父表第一行中childlist表的id为::form:baselist:0:childlist
父表第二行中childlist表的id为::form:baselist:1:childlist
父表第三行中childlist表的id为::form:baselist:2:childlist
依旧......
<强>解决方案:强>
更新父表,以便更新和同步所有内容,包括所有行中的子列表表
<强>例如强>
update=":form:baselist"
<强> Unrealated:强>
您可以通过右键单击浏览器中的呈现页面并查看页面源来查看元素的完全限定ID。
答案 1 :(得分:0)
您可以尝试使用#{component.parent.clientId}
但不会像您想象的那样获得收益。
JSF通常会重建整个结构,请参阅:Does Facelets rebuild the whole page if Ajax is trigger from a form and updates another?
中的答案此外,如果您修改了baselist
,那么您将遇到问题,因为:0,:1
命名容器ID将变得不一致。
例如如果从baselist
中删除第一个元素,JSF将使用新的ID重新构建视图。
因此:form:baselist:1:childlist'
将成为:form:baselist:0:childlist
等。
我不确定你是否会收到错误,但肯定会迟早会引起一些痛苦。