在 JSF 中,<ui:repeat/>
PrimeFaces 等类似组件<p:dataTable/>
根据迭代索引为子组件生成动态 id,即:
<p:dataTable id="table" var="item" value="#{itemList}">
<h:outputText id="name" value="#{item.name}"/>
</p:dataTable>
会产生这样的东西:
<table id="table">
<span id="table:0:name">name0</span>
<span id="table:1:name">name1</span>
<span id="table:2:name">name2</span>
...
<span id="table:n:name">nameN</span>
</table>
所以所有元素显然都有一个不同的客户 ID。我故意跳过<tr/>
,<td/>
等。
因此,<p:ajax ... update=":table:name"/>
引用表中的所有名称并且它工作正常,虽然我可以确认组件存在于标记中但<p:ajax ... update=":table:#{someDesiredIndex}:name"/>
失败并显示类似于事件的消息。SEVERE: javax.faces.FacesException: Cannot find component with identifier ":table:0:name" in view.
难道不能这样做吗?
我在 GlassFish 3.1.2 和 Mojarra 2.1.6 上运行以防万一。