1

誰かがそのような問題の解決策を持っていますか?

私のアプリでは、primefacesダッシュボードに基づいてプログラムで構築された複雑なダッシュボードを使用しています。ダッシュボードを構築するパネルの一意でないIDの問題を克服するために、このコンポーネントをリクエストスコープのBeanにバインドしています。また、commandButtonをクリックした後、いくつかの変更可能なパラメーターに基づいてダッシュボードを再構築したいと思います。

問題は、ダッシュボードのゲッターが、コマンドボタンのactionListenerが起動される前に(アプリケーションの呼び出しフェーズで)、リクエスト値の適用フェーズで起動されることです。そのため、ダッシュボードは最終的に再構築されますが、レンダリングされた応答では更新されません。

一方、ボタンのイミディエイト属性をtrueに設定しようとすると、actionListenerは、Apply Request Valuesフェーズで起動されますが、それでもゲッターの後で起動されます。ライフサイクルが直接レンダリング応答フェーズに進むよりも、結果は同じです。

誰?


答えてくれてありがとう。私の問題に少し詳細を追加しましょう。

スポーツトーナメントのモデルをセッションスコープのBeanのプロパティとして保存します。これは次のようになります。Beanには「トーナメント」というプロパティがあります。このクラスにはグループのリストがあり、それぞれに一致のテーブルがあります。このトーナメントモデルのレンダラーとして、プログラムで作成された3つの異なるコンポーネントを使用するというアイデアでした。

ダッシュボードは、グループでの競技者の配置のドラッグアンドドロップ版に使用されます。一致テーブルを表示し、それらの一致を編集するために、すべてのテーブルにパネルグリッドがあるタブパネルを使用します。最後に、パネルグリッドを使用してトーナメントツリーを表示します。これらの3つのコンポーネントはすべて、ユーザーが編集できるようにモデルの一部をレンダリングします。

モデル(したがって、これらのレンダリングコンポーネント)は、たとえばグループの数などの選択可能なパラメーターに基づいて動的にビルドされるため、セッションスコープのBeanにバインドするときにiduniqnesに問題がありました。そこで、リクエストスコープのBeanにバインドしました。モデル(主にajax)を変更するすべてのリクエストで、ユーザーが設定したパラメーター(セッションスコープのBeanにも格納されている)に応じて、これらのコンポーネントを再レンダリングしたいと思いました。

問題は、アプリケーションの呼び出しフェーズで(「rebuild-my-model」ボタンによって起動されたアクションリスナーで)モデルを再構築すると、リクエストスコープのBeanにバインドされたコンポーネントがすでに「取得」されていることです。 Beanから(またはそう思われる)、ページ上で更新されません。

私が間違っていることへの手がかり、そしておそらく上記のアプローチが完全に愚かであるならば、提案に非常に感謝します:)

4

1 に答える 1

1

問題は、コマンドボタンのactionListenerが起動される前に、ダッシュボードのゲッターがリクエスト値の適用フェーズで起動されることです。

なぜそれがあなたにとって問題になるのかよくわかりません。おそらく、アクションリスナーメソッドではなく、getterメソッドでビジネスロジックを誤って実行しているのでしょうか。または、JSFで作成されたコンポーネントを参照するのではなく、手動でコンポーネントを作成しているため、JSFビューで常にコンポーネントをオーバーライドしているのではないでしょうか。

適切なJSFゲッターメソッドは基本的に次のようになります。

public UIComponent getDashboard() {
    return dashboard;
}

他のコード行を含めることはできません。ちなみにセッター方式も同様です。コンポーネントの子を操作する必要があるアクションは、ゲッター/セッターメソッドではなく、アクション(リスナー)メソッドで実行する必要があります。

于 2012-08-03T12:29:59.880 に答える