0

非常にパラメータ化可能で動的な webapp があります。Mojarra 2.1.19 および Primefaces 3.5 で JSF 2 を使用しています。

コンポーネントとは、高レベルのコンポーネント、つまり xhtml ファイルに関連付けられた backbean を意味します。xhtml テンプレート内のバッキング Bean の EL 名は常に「comp」です。

私が実装した機能は次のとおりです。

  • コンテナー コンポーネント (タブ、パネルなど) があり、その中のコンポーネントをレンダリングできるようにしたいと考えています。コンテナーは、ユーザー アクションと構成ファイルを通じて動的に供給され、コンテナーが含まれるコンポーネントとその数を予測する方法はありません。
  • コンポーネント「A」は、コンポーネント ツリー内の位置に関係なく、ハード カップリングなしでコンポーネント「B」を更新できます。コンポーネント "A" はコンポーネント "B" を認識していません。コンポーネント "A" は、コンポーネント "B" によって実装された機能を更新する必要があることだけを認識しています。

コンポーネント パターンを使用すると、コンポーネント ツリーを使用して高レベルのアプリケーションを構築できます。実際に c:forEach パターンを使用してコンポーネントを動的に追加します。

<c:forEach items="#{comp.values}" var="value">
    <ui:include src="#{value.uri}">
        <ui:param name="comp" value="#{value}"/>
    </ui:include>
</c:forEach>

コンポーネントをリンクするために汎用チャネル メッセージを使用します。リフレッシュするには、バインディングを使用します

次のすべてのパターンが一貫性のない状態を作成し、恐れられている重複 ID 例外をスローする可能性があることを読みました。

  • c:forEach
  • セッションのバインド
  • Java を使用してコンポーネントを追加する

私はいつも地雷原の上を歩いているような気がします。今、私は厄介な重複IDエラーに悩まされています。

動的および汎用コンポーネントを JSF 2 に追加するための堅牢なパターンを作成する方法はありますか?

ご回答有難うございます!

4

1 に答える 1

0

ビュー スコープ全体で物理的に異なるコンポーネントを 1 つの同じ Bean プロパティにバインドしていないことを確認してください。属性は、リクエスト スコープのプロパティを指している必要があり、ビュー スコープ中に物理的に異なるコンポーネント間で共有されてはなりません。bindingただし、同時に最大 1 つのコンポーネントによって使用される場合でも同様です。

「セッションでのバインディング」の問題は、一意のコンポーネントをセッション スコープの Bean プロパティにバインドし、同じセッションで異なるブラウザー タブ/ウィンドウで同じビューを複数回開く場合にのみ適用されます。

于 2013-02-18T11:41:03.437 に答える