2

JSF (@Managedbean) によって管理される requestscoped Bean を使用すると、@ManagedProperty("#{param.id}") でリクエスト パラメータの値を取得できます。

リクエストがGETリクエストの場合、f:viewParamでリクエストパラメータの値を取得できます。

Bean が CDI 管理 (@Named) で、リクエストが POST リクエストの場合、リクエスト パラメータの値を取得する特別なメカニズムはありますか? Javaコードしか知らない

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
4

1 に答える 1

1

<f:viewParam>POSTリクエストでも同様に機能します。

これは、応答のレンダリング段階ではなく、要求値の適用段階でのみ実行されることに注意してください。したがって、実際にアクション メソッドをナビゲートしていて、パラメーターがターゲット ページのビュー パラメーターとして設定されることを期待している場合は、間違っています。POST リクエストが実際に送信されるビューでのみ設定されます。

POSTでも動作することを示す証拠として<f:viewParam>、テスト スニペットを次に示します。

<f:metadata>
    <f:viewParam name="foo" />
</f:metadata>
<h:form>
    <h:commandButton value="submit">
        <f:param name="foo" value="bar" />
    </h:commandButton>
</h:form>
<p>foo: #{foo}</p>

送信ボタンを押すと表示されfoo: barます。

具体的な機能要件を別の方法で解決する必要があります。質問で具体的な機能要件について何も言わなかったので、それについて精巧な答えを出すことはできません。ここに少なくともいくつかのヒントがあります:

  1. @InjectBean をターゲットにして、アクション メソッド中にプロパティとして設定します。
  2. を使用し<f:setPropertyActionListener>ます。
  3. フラッシュスコープを使用。
  4. クエリ文字列にパラメーターを指定してリダイレクトを送信します。
于 2012-12-06T16:21:47.780 に答える