在JSF中,<ui:repeat/>类似的组件(如PrimeFaces)<p:dataTable/>根据迭代索引为子组件生成动态ID,即:
<p:dataTable id="table" var="item" value="#{itemList}">
<h:outputText id="name" value="#{item.name}"/>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
会生成这样的东西:
<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>
Run Code Online (Sandbox Code Playgroud)
所以所有元素显然都有明确的客户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 ×1