DWZ-Java框架Ajax請求session超時處理思路: 1)SessionValidateFilter統一驗證session是否超時 2)SessionValidateFilter中判斷請求是否爲ajax請求 3)ajax請求session超時返回一個json {"statusCode":"301", "message":"Session Timeout! Please re-sign in!"} 4)dwz js框架根據statusCode==301,處理是跳轉到登錄頁面或者彈出登陸dialog
-------------------------------------------------------------------
java服務器端處理: SessionValidateFilter中修改: javascript
if
(
"
XMLHttpRequest
"
.equalsIgnoreCase(request.getHeader(
"
X-Requested-With
"
))
||
request.getParameter(
"
ajax
"
)
!=
null
) { PrintWriter out
=
response.getWriter(); out.println({"statusCode":"301", "message":"Session Timeout! Please re-sign in!"});
}
else
{ response.sendRedirect(response.encodeRedirectURL(
this
.loginUrl
+
java.net.URLEncoder.encode(backToUrl,
"
UTF-8
"
))); }
-------------------------------------------------------------------
js客戶端處理:
session超時跳轉到登錄頁面仍是彈出登陸dialog,在DWZ UI初始化時設置:html
<
script type
=
"
text/javascript
"
>
$(
function
(){ DWZ.init(
"
dwz.frag.xml
"
, {
//
loginUrl:"loginsub.html", loginTitle:"登陸", // 彈出登陸對話框
loginUrl:
"
login.html
"
,
//
跳到登陸頁面
statusCode:{ok:
200
, error:
300
, timeout:
301
},
//
【可選】
pageInfo:{pageNum:
"
pageNum
"
, numPerPage:
"
numPerPage
"
, orderField:
"
orderField
"
, orderDirection:
"
orderDirection
"
},
//
【可選】
debug:
false
,
//
調試模式 【true|false】
callback:
function
(){ initEnv(); $(
"
#themeList
"
).theme({themeBase:
"
themes
"
}); } }); });
<
/
script>
ajax load頁面碎片處理:
ajax請求統一使用dwz的loadUrl()方法,不能使用jquery自帶的load(). 當客戶端調用loadUrl()而且session超時了,跳轉到登錄頁面或者彈出登陸dialog。 session超時彈出登陸dialog注意事項: 用一個帶屏蔽層的dialog覆蓋的整個瀏覽器.這時瀏覽器窗口內容不能變,只是上面加了一個登陸框和一個背景層。 當用戶輸入username and password登陸成功後,去掉登陸框和背景層.這時用戶能夠繼續操做. 登陸失敗alert出錯信息,瀏覽器窗口內容仍是不變. 參考dwz.core.js代碼片斷java
loadUrl:
function
(url,data,callback){
var
$
this
=
$(
this
); $.ajax({ type:
'
POST
'
, url: url, cache:
false
, data: data, success:
function
(response){
var
json
=
DWZ.jsonEval(response);
if
(json.statusCode
==
DWZ.statusCode.timeout){ alertMsg.error(DWZ.msg(
"
sessionTimout
"
), {okCall:
function
(){ DWZ.loadLogin(); }}); }
if
(json.statusCode
==
DWZ.statusCode.error){
if
(json.message) alertMsg.error(json.message); }
else
{ $
this
.html(response).initUI();
if
($.isFunction(callback)) callback(response); } }, error: DWZ.ajaxError }); }
ajax post 表單數據處理: 當客戶端ajax提交表單超原理同ajax load 參考dwz.core.js代碼片斷jquery
ajaxDone:
function
(json){
if
(json.statusCode
==
DWZ.statusCode.error) {
if
(json.message
&&
alertMsg) alertMsg.error(json.message); }
else
if
(json.statusCode
==
DWZ.statusCode.timeout) {
if
(json.message
&&
alertMsg) alertMsg.error(json.message, {okCall:DWZ.loadLogin});
else
DWZ.loadLogin(); }
else
{
if
(json.message
&&
alertMsg) alertMsg.correct(json.message); }; }
-------------------------------------------------------------------
注意事項: ajax請求session超時服務器端返回一個json就能夠了,其餘的就交給dwz js框架來處理,服務器端只要作到ajax請求session超時返回以下json就能夠了:ajax
{
"
statusCode
"
:
"
301
"
,
"
message
"
:
"
Session Timeout! Please re-sign in!
"
}