2017-01-24 4 views
0

ここではOracle ADF 12cを使用しています。 私はセッションの有効期限処理のためにFilterを使用しています。Oracle ADF:PPRリクエストでResponse.sendRedirectが機能しない

セッションは、次のようにログインページにリダイレクトその後、有効期限が切れている場合:

response.sendRedirect("/myapp/faces/login.jsp"); 

しかし、ブラウザからの要求は、上記の指定されたリダイレクトが機能していないPPR(部分ページ・レンダリング)要求である場合。

これを解決するには、次のような解決策を試しました。post

ここで、リダイレクトはPPR要求に対して正常に動作しています。しかし、特別な部分的な応答xmlのために定期的な要求のために働いていません。

PPRリクエストと定期リクエストを区別するために、私は上記の投稿に指定された以下のチェックを追加しました。

if ("partial/ajax".equals(request.getHeader("Faces-Request"))) { 
// It's a JSF ajax request. 
} 

しかし、ADF PPRリクエストは "-Requestを顔" リクエストヘッダを送信していません。したがって、PPR要求を含むすべての要求は、通常の要求として扱われます。

ADF PPRリクエストと通常のリクエストを区別する方法は?

答えて

2

ADFの部分応答のインジケータは、要求ヘッダーまたは要求パラメータのいずれかにキー「Adf-Rich-Message」が存在することです。キーは11gから存在しており、12cでは新しいものではありません。

フィルタにはFacesContextオブジェクトがありません。そのため、ServletRequestで直接キーを検索します。

boolean isPartialRequest = "true".equals(request.getParameter("Adf-Rich-Message")) || "true".equals(request.getHeader("Adf-Rich-Message")); 

あなたがチェックポストJSFコンテキストの初期化を実装する場合、以下のチェックが動作するはずです:

FacesContext.getPartialViewContext().isAjaxRequest() 

または

ExternalContext ec = FacesContext.getExternalContext(); 

    boolean isPartialRequest = "true".equals(ec.getRequestHeaderMap().get("Adf-Rich-Message")) || "true".equals(ec.getRequestParameterMap().get("Adf-Rich-Message")) 

上記と同じです。

+0

OPにはこのようなヘッダーはありません。 – BalusC

+0

@BalusC OPがおそらくヘッダーを見落としていたか、間違ったポストバックを探していました。 –

+0

@ BalusCあなたの提案は、リクエストでは利用できない "Faces-Request"という名前のヘッダです。 Aswin Prabhuはヘッダが "Adf-Rich-Message"であり、リクエストヘッダで利用可能であることを提案しました。 – Awesome

関連する問題