私はbrowse.xhtml
を持っています。ここでcars
のリストを閲覧し、[もっと見る]ボタンがクリックされたときにdetails.xhtml
で車の詳細を表示したいと思います。それらのバッキングBeanは@ViewScoped
であり、それぞれBrowseBean
およびDetailsBean
と呼ばれます。
ここで、ユーザー/クライアントがURLに車のIDを表示したくないので、 here および here のように、GET paramsの使用を避けたいと思います。
これを達成する方法はありますか? PrimeFaces 5とOmniFaces 1.8.1でMojarra 2.2.8を使用しています。
リダイレクトを送信するか、単にナビゲートするかによって異なります。
リダイレクトを送信する場合は、Flashスコープに配置します。
Faces.setFlashAttribute("car", car);
これは@PostConstruct
次のBeanとして:
Car car = Faces.getFlashAttribute("car");
または、単にナビゲートしている場合は、リクエストスコープに配置します。
Faces.setRequestAttribute("car", car);
これは@PostConstruct
次のBeanとして:
Car car = Faces.getRequestAttribute("car");
私はあなたが他のビューなしではなく、他のビューなしでは存在できない(べき等である)2つの完全に独立したビューを持つというデザインの選択について非常によく知っていると思います。条件付きでレンダリングされたコンテンツを含む単一のビュー。また、実際にべき等に(つまり、ブックマーク、共有リンク、サーチボットなどを介して)要求されている場合に、ビューが正確にどのように動作するかをすでに知っていること。そうでない場合は、この質問の回答を注意深く読むことを強くお勧めします: JSF内を移動する方法?URLに現在のページを反映させる方法(前のページではない) 。
Update:OmniFacesを使用していない場合は、それぞれ以下を使用します。
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("car", car);
Car car = (Car) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("car");
FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("car", car);
Car car = (Car) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("car");