我有一個需求,我們需要重定向到JSF 1.2 Ajax調用的頁面。在我們的例子中,當會話過期後,當ajax調用被觸發時,我們需要重定向到會話過期頁面。我們正在過濾器中實施會話過期檢查,並且如預期的那樣,httpservletresponse.sendRedirect的調用正確地重定向到會話過期頁面,但是url沒有被更改,這是現在的問題。JSF 1.2 AJAX重定向到URL
無論是在客戶端/服務器端的任何提示/靈魂都受到高度讚賞。
〜Ragesh
我有一個需求,我們需要重定向到JSF 1.2 Ajax調用的頁面。在我們的例子中,當會話過期後,當ajax調用被觸發時,我們需要重定向到會話過期頁面。我們正在過濾器中實施會話過期檢查,並且如預期的那樣,httpservletresponse.sendRedirect的調用正確地重定向到會話過期頁面,但是url沒有被更改,這是現在的問題。JSF 1.2 AJAX重定向到URL
無論是在客戶端/服務器端的任何提示/靈魂都受到高度讚賞。
〜Ragesh
最後,我設法找到了解決上述問題的方法。
在過濾器中,我設置了響應標頭「位置」和另一個自定義標頭,我將在客戶端使用該標頭過濾響應。
過濾代碼:
httpServletResponse.setStatus(HttpServletResponse.SC_OK);
httpServletResponse.setHeader("x-timeout-status", "true");
httpServletResponse.setHeader("Location", httpServletResponse
.encodeRedirectURL(sessionexpiryurl));
的RichFaces已經得到與包裝RichFaces的庫裏面的AJAX調用調用過程中所需的各種回調的JavaScript文件。有一個稱爲「processResponse」的回調函數,它將在接收到由JSF Ajax組件發起的所有AJAX調用的響應時被調用。我利用這個來處理重定向功能。
JS代碼:
var originalAjaxProcessResponse = A4J.AJAX.processResponse;
A4J.AJAX.processResponse = function(req) {
if (req.getResponseHeader('x-timeout-Status') != undefined && req.getResponseHeader('x-timeout-status') == 'true') {
window.location.href = req.getResponseHeader('Location');
} else {
originalAjaxProcessResponse(req);
}
}
在這裏,我們覆蓋方法來處理我們的具體情況,並委託Ajax調用響應處理,以通過RichFaces的提供的內置處理的其餘部分。
請讓我知道,如果你看到任何限制該解決方案或有更好的辦法解決這個問題
〜Ragesh