11

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

4

1 に答える 1