次のリダイレクト方法で、誰かがデータでリダイレクトする方法を教えてもらえますか:
FacesContext.getCurrentInstance().getExternalContext().redirect("page1.xhtml");
送信したい文字列「regNo」がいくつかあります。また、page1.xhtml でそれを受け取る方法を教えてください。
次のリダイレクト方法で、誰かがデータでリダイレクトする方法を教えてもらえますか:
FacesContext.getCurrentInstance().getExternalContext().redirect("page1.xhtml");
送信したい文字列「regNo」がいくつかあります。また、page1.xhtml でそれを受け取る方法を教えてください。
いくつかのオプションがあります。ここでは、最も簡単な 2 つの方法について説明します。
HTTPリクエストパラメータとして渡すだけです。
String regNo = "somevalue";
String url = "/page1.xhtml?regNo=" + URLEncoder.encode(regNo, "UTF-8");
ec.redirect(ec.getRequestContextPath() + url);
(URLEncoder
値に非 ASCII 文字または URL 特殊文字が含まれている場合、または数字のみが含まれている場合は、URL エンコードをスキップできます)
または通常の方法#{param.regNo}
で Bean プロパティとして設定できるターゲット ビューで使用できます。ViewParam と @ManagedProperty(value = "#{param.id}")も参照してください。@ManagedProperty
<f:viewParam name="regNo">
フラッシュ スコープ オブジェクトとして渡します。
String regNo = "somevalue";
String url = "/page1.xhtml";
ec.getFlash().put("regNo", regNo);
ec.redirect(ec.getRequestContextPath() + url);
これ#{flash.regNo}
は、 を介して Bean プロパティとして設定できるターゲット ビューで使用できます@ManagedProperty
。
@ManagedProperty("#{flash.regNo}")
private String regNo; // +setter
主な機能上の違いは、HTTP リクエスト パラメーター アプローチがべき等であるのに対し、Flash スコープ オブジェクト アプローチは非べき等であることです。つまり、HTTP リクエスト パラメータ アプローチのみがブックマーク可能であり、URL をコピー/ブックマーク/共有するだけで、まったく同じ結果が再現されます。