2015-01-08 58 views
0

我有一個需求,我們需要重定向到JSF 1.2 Ajax調用的頁面。在我們的例子中,當會話過期後,當ajax調用被觸發時,我們需要重定向到會話過期頁面。我們正在過濾器中實施會話過期檢查,並且如預期的那樣,httpservletresponse.sendRedirect的調用正確地重定向到會話過期頁面,但是url沒有被更改,這是現在的問題。JSF 1.2 AJAX重定向到URL

無論是在客戶端/服務器端的任何提示/靈魂都受到高度讚賞。

〜Ragesh

回答

0

最後,我設法找到了解決上述問題的方法。

在過濾器中,我設置了響應標頭「位置」和另一個自定義標頭,我將在客戶端使用該標頭過濾響應。

過濾代碼:

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