3

JSF2.1/Richfaces 4.2 アプリケーションで興味深いことがわかりました。Filter (または) JSF Bean アクションメソッド内のすべての response.sendRedirect() 呼び出しが機能していない。

クライアント側 (ブラウザ) で location.href を使用すると、正常に動作します。

送信リダイレクトの失敗の原因について何か提案はありますか? 以下の署名を試しました。

response.sendRedirect("/appRoot/mypage.xhtml");
  or 
(HttpServletResponse) facesCtx.getResponse()).sendRedirect(((HttpServletRequest)request).getContextPath()+"/appRoot/mypage.faces");
4

2 に答える 2

7

Filter(または)JSF Beanアクションメソッド内のすべてのresponse.sendRedirect()呼び出しが機能していない方法。

これは、リクエストが実際にajaxリクエストである場合に発生する可能性があります。Webブラウザーは、リダイレクトをXMLHttpRequestメインウィンドウにまったく変換しません。ajaxリクエストを送信しているJSコードがその責任を負います。JSコードがウィンドウの場所を変更する必要があることを理解するために特別な/異なる応答が必要であるか、それに応じて応答を処理できるようにJSコード自体を変更する必要があります。

ajaxリクエストがJSF自体によって開始され(たとえば<f:ajax>など)、JavaコードがJSFコンテキスト内で実行されている場合は、ExternalContext#redirect()代わりにを使用する必要があります。これは、現在のリクエストがajaxリクエストであるかどうかを自動検出し、JSFajaxエンジンにウィンドウの場所を変更するように指示する特別なXML応答を返します。JSFコンテキスト内にいない場合(たとえば、内Filter)、次のようにこの特別なXML応答を自分で作成する必要があります。

response.setContentType("text/xml");
response.getWriter()
    .append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
    .printf("<partial-response><redirect url=\"%s\"></redirect></partial-response>", url);

参照:

于 2012-06-08T18:41:15.790 に答える
0
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
于 2014-03-10T16:31:19.277 に答える