【发布时间】:2013-04-16 17:20:24
【问题描述】:
在 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 上运行以防万一。
【问题讨论】:
标签: jsf-2