CRUD を実行すると、RequestScoped チケット Bean があります。
これまで新しいチケットを作成するために使用していた XHTML ページがあります。チケットフィールドは直接入力されます(#{ticket.description}
など)
これで、チケットを一覧表示する検索フォームができました。各チケットには、チケット ID をパラメータとして持つリンクがあります。バッキング Bean が EJB/JPA からチケット Bean を取得し (既に実行済み)、それをリクエストに入れるようにします。私はそうする3つの方法を見ます:
- JPA から取得した Bean からインジェクションで提供された Bean にデータをコピーします。醜い/脱落しやすい.
- ExternalContex#getRequestMapを使用して、自分で Bean を配置します。非常に適切に見えません。私は正しいですか?
- できるように、チケット Bean を別の Bean クラスに含めます
myNewBean.setTicket(ticketFromJpa);
。最良のオプションのように思えますが、このためだけにページ内のすべての EL にプレフィックスを付けなければならないのは好きではありません。
私がやりたいことを行うための、よりクリーンで適切な方法はありますか?
前もって感謝します。
更新:もう少し情報を加えて、私が欲しいものを言い換えます。page に commandLink があり、バッキング BeanP1
で action を呼び出します。そのロジックを実行し、 page にリダイレクトします。(リクエスト スコープの) Beanをアクションに設定したかったので、それを描画できます。A
B1
B1
P2
B2
A
B2
P2
実験から、アクションを終了した後A
、フレームワークが新しいB2
リクエスト スコープ Bean を作成することがわかったので、リクエスト スコープが予想よりも短いように見えます。
ダミアンによって提案されたフラッシュスコープは、私が望むように機能するように見えますが、 #{flash} の周りのページを再設計する必要があり、(それを使用して新しい Bean を作成したい場合) Bean をアクションメソッドでフラッシュします(現在、ページに移動するだけでマネージドBeanが利用可能です)
Request スコープの Bean が維持されることを期待していました。