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 で実行しています。