博客原文:http://hi.baidu.com/kangjun118/item/6056bd22e1af3b012a0f1c6b
我做了一个后台管理, 页面用 table 中嵌入 iframe 做的.
后台首页分3个部分, top.jsp 顶部的页面. left.jsp 左侧的菜单页面. right.jsp 右侧显示类容页面.
在left.jsp 中 有一个 iframe: <iframe id="leftMenuFrame" name="leftMenuFrame" src="<%=request.getContextPath() %>/backManage/toLeftJsp.shtml"/>
在right.jsp 中 也有一个 iframe: <iframe id="leftMenuFrame" name="leftMenuFrame" src="<%=request.getContextPath() %>/backManage/toRightJsp.shtml"/>
我在这两个 action 的配置文件中都配置了拦截器.
<package name="backManage" extends="tour" namespace="/backManage">
<!-- 到后台左侧页面 -->
<action name="toLeftJsp" class="BackManageAction" method="toLeftJsp">
<result name="success">/jsp/left.jsp</result>
<interceptor-ref name="loginAdminInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>
<!-- 到后台右侧页面 -->
<action name="toRightJsp" class="BackManageAction" method="toRightJsp">
<result name="success">/jsp/backRight.jsp</result>
<interceptor-ref name="loginAdminInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"/>
</action>
</package>
当 session 失效之后再去刷新页面, 于是这两个 action 都跳到登陆页面. 这样就出现了两个登陆页面.
要解决的问题就是在session失效之后, 跳转到登陆页面. 而不是一个页面中出现两个登陆页面.
解决办法:
1)在你的login.jsp中,加一段脚本
- JScript code
-
if(self.location!=top.location) { top.location.href=self.location.href;}
2)新建一个中间页面,如下:
relogin.jsp
<html>
<head>
<title></title>
<script type="text/javascript">
window.top.location='<%=request.getContextPath()%>';
</script>
</head>
</html>
然后,在struts.xml里面配置一个全局结果:
<global-results>
<result name="relogin" >/jsp/relogin.jsp</result>
</global-results>
最后,在拦截器中跳转到这个全局结果