0

次のリダイレクト方法で、誰かがデータでリダイレクトする方法を教えてもらえますか:

FacesContext.getCurrentInstance().getExternalContext().redirect("page1.xhtml");

送信したい文字列「regNo」がいくつかあります。また、page1.xhtml でそれを受け取る方法を教えてください。

4

1 に答える 1

2

いくつかのオプションがあります。ここでは、最も簡単な 2 つの方法について説明します。

  1. 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">


  2. フラッシュ スコープ オブジェクトとして渡します。

    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 をコピー/ブックマーク/共有するだけで、まったく同じ結果が再現されます。

于 2013-11-15T11:17:40.720 に答える