frame頁面跳轉和信息提示頁面

在web應用中經常需要判斷用戶是否已經登錄,如果沒有登錄,那麼跳轉到登錄頁面。一般我們在後臺頁面中都會使用frame來劃分功能區。這種方法比較實用,但是隨之而來就有一個小問題,就是當用戶session超時之後,當用戶再在後臺進行操作時,我們需要重新讓用戶登錄。一般我會選擇使用一個Filter來控制用戶的訪問權限,當用戶沒有登錄的時候重定向到login.jsp。那麼我們可以直接使用request.sendRedirect()方法來實現。但是由於是在frame中,所以這種方式會將login.jsp顯示在當前的frame中,這並不是我們想要的效果。sendRedirect放方法中並沒有能<A>中的target屬性。這裏我們可以採用javascript來實現這一功能。

PrintWriter out =resp.getWriter();

out.write("<html>");

out.write("<script>");

out.write("window.open ('login.jsp','_top')");

out.write("</script>");

out.write("</html>");

return;

當然,如果瀏覽器禁用了javascript,那麼這種方法就沒用了。不過有多少人沒事將javascript禁用調用呢。如果有更好的方案(不使用js),麻煩告知我一下..

還有一個問題就是,當用戶登錄失敗或者操作執行之後總是需要給出一些提示信息吧。如果總是使用js彈窗來做提示的話,用戶體驗不好。最好還是專門做一個提示頁面,當需要顯示提示信息的時候,我們可以呈現該頁面,並將一些參數傳遞過來,比如提示內容,要調轉的頁面等。在使用struts2時,我不太喜歡使用自帶的一些提示功能(也不喜歡用它的標籤),小的網站應用根本不用考慮國際化之類的問題,直接把提示硬編碼在代碼中效率更高,誰沒事三天兩頭的去修改代碼…

message.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath()
			+ request.getAttribute("url");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>

		<title>提示信息</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="Refresh" content="4; url=<%=path%>" />
	</head>

	<body>
		<table border="0" align="center" cellpadding="5" cellspacing="1"
			style="font-size: 14px; color: #333333; margin-top: 100px; background: #70afd3">
			<tr style="color: #FFFFFF">
				<th>
					提示信息
				</th>
			</tr>
			<tr>
				<td height="100" style="font-size: 12px; background: #FFFFFF">
					<div style="font-size: 14px; font-weight: bold; margin: 10px;">
						${message}
					</div>
					<div style="margin: 10px;">
						系統將在 
						<span id="countDownSec" style="color: blue; font-weight: bold"></span> 秒後自動跳轉,如果不想等待,直接
						<a href=<%=path%> style="color: #069;">點擊這裏</a>
					</div>
				</td>
			</tr>
		</table>
<script language="javascript" type="text/javascript">
var countDown = function(timer,eleId,interType){
	document.getElementById(eleId).innerHTML = timer;
	var interval = interType=='s'?1000:(interType=='m'?1000*60:1000*60*60);
	window.setInterval(function(){
		timer--;
		if (timer > 0) {
			document.getElementById(eleId).innerHTML = timer;
		}
	},interval);
};

countDown(4,'countDownSec','s');

</script>
	</body>
</html>

Action呈現提示頁面:

setMessage("登錄失敗:用戶名或密碼不正確!","/admin/login.jsp");

return MESSAGE;

效果圖:

以上是小弟個人看法,如有不妥之處還望前輩指正!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章