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异常,尽管我可以看到它是正确的。