0

私は次のようなコードを使用しようとしています:

<ice:dataTable id="revisionDocuments" value="#{agendaBean.agenda.revisionsDocuments}" var="revision">
    <ice:column>
        <ice:inputText value="#{revision.sequenceAdresse}" id="revisionSequenceAdresse#{revision.index}" />
    </ice:column>

フォームフィールドに別のIDを使用したいのですが。リビジョンオブジェクトには、リスト内のオブジェクトのインデックスを表す「インデックス」フィールドが含まれています。IDに表示されるのを見たいです。ただし、何も起こりません。#{revision.index}式が解釈されることはありません(リビジョンオブジェクトのgetIndex()が呼び出されることはありません)。

あなたは私にJSFがすでに次のようなものを作っていると言うでしょう:

revisionDocuments:0:revisionSequenceAdresse
revisionDocuments:1:revisionSequenceAdresse
revisionDocuments:2:revisionSequenceAdresse

本当ですが、これはHTMLで生成されたclientIdにのみ影響します。フォームフィールドを表すUIComponent(FacesContextのViewRoot内)には、すべて同じ「id」と「clientId」があります(はい、HTMLに「revisionDocuments:0:revisionSequenceAdresse」が含まれている場合はイベントです。ViewRootにある「clientId」は次のとおりです。 RevisionDocuments:revisionSequenceAdresse)。

誰かが私の試みを手伝ってくれる?

どうもありがとうございました、どんな助けでも大歓迎です。

4

1 に答える 1

0

コンポーネントIDは、ビューのレンダリング時間ではなく、ビューのビルド時に決定されます。ビューの#{revision}ビルド中は使用できないため、常に空と評価されます。#{agendaBean}基本的に、ビューのビルド時にすでにスコープ内にあるものにバインドする必要があります。コンポーネントIDは、生成されたHTML出力ではなく、コンポーネント自体に固有です。物理的に1つの同じコンポーネントに複数の異なるIDを割り当てることはできません。

しかし、実際には、このアプローチをいじくり回す必要はありません。これが解決策であると考えた具体的な問題は、前の質問ですでに回答されています:JSF2 + IceFaces2-ViewRootからUIComponentを取得します

于 2011-12-09T13:37:46.563 に答える