0

私たちの問題は、JSF + EJB を使用してデータベースを編集するための非常に基本的で単純な実装です。

簡単に言うと、2 つの別個の XHTML ビューで、2 つの別個のマネージド Bean @RequestScope を使用します。

WebuserListBean と EditWebuserBean、および @ManagedProperty を使用して WebuserListBean を注入し、選択したユーザー データを取得できるようにします。これまでのところ問題はありません。ビューにデータが正常に入力されました!

しかし!ユーザーを編集できるようにしたい!そしてここで(驚いたことに)、この問題を克服することはできません。

最初の試行: ビューを埋めた後にリクエスト スコープ Bean が停止しているため、Save() メソッドで @PostConstruct が再度起動しようとしますが、もちろんできません。そのため、データベースなどから取得することさえできませんでした。

2 回目の試行: リクエスト スコープ Bean はビューを埋めた後に死んでいるため、@postconstruct でユーザーをフィールドとして設定しないと、前のビューにリンクされていた (そして注入されたが、現在そのビューはあまりにも死んでいる)。

3 回目の試行: ViewScoped に RequestScope を挿入できない

わかりました、そして私たちの制限は、それが間違っていると思うからです:

  1. このために SessionScoped Managed Bean を作成したくありません
  2. パラメータなどを使用したくない.EJBを使用したい
  3. モジュールのエンドポイントであるステートフル セッション Bean にデータを格納できるかどうかわかりません。適切なアプローチですか?

アドバイスありがとうございます。コードを貼り付けることができますが、それは無意味だと思います! 乾杯!

4

1 に答える 1

0

方法はたくさんありますが、ナビゲーションに関連するページが同じフォルダーにある場合は、フラッシュを使用することをお勧めします (最近、BalusCの回答を読んで、フラッシュには既知の問題があることがわかりました。異なるフォルダ内のページ間を移動するときに値を保持します!)。

フラッシュは、単一のリクエストのコンテキストよりも少し長い間パラメーターを保持する方法です (概念が Ruby から取られたもので、私が間違っていなければ、誰かが私を訂正してくれます)、送信されたパラメーターをフェッチできるようにしますたとえば、後続のビュー。私が間違っていなければ、これらの値は、それらを保存した後に発行される 2 番目のリクエストで破棄されます。次のようにマネージド Bean にフラッシュを挿入できます。

@ManagedProperty("#{flash}")
private Flash flash;

public void setFlash(Flash newFlash) {
    flash = newFlash;
}

次に、put メソッドと get メソッドを使用してマップのようにアクセスします。Bean で put メソッドを使用する場合は、リダイレクション ルールを返し、2 番目の Bean で get メソッドを使用して、オブジェクトが存在するようにします。

また、特に異なるフォルダ内のページ間を移動する必要がある場合は、JSF でのコミュニケーションの非常にわかりやすいガイド (オプションの非常に広範なリストのリスト) をここで見つけることもできます。

于 2012-07-24T16:23:31.943 に答える