您的位置:首页 > 编程语言 > Java开发

action重定向到frameset页面指定target属性

2017-02-16 00:50 176 查看

后台重定向传递frameset页面target属性

一、问题描述

使用struts2的项目,在frameset前端页面的顶部窗口有个注销登录的链接,点击该链接,后台将清除session保存的用户信息,并且将页面重定向到登录页面。

二、尝试的无效方法

2.1 struts2的result标签

使用struts2的result标签,登录页面始终只出现在页面顶部,其他部位不变

<!--无效代码-->
<result name="logout_success" type="dispatcher">/login.jsp</result>


或者

<!--无效代码-->
<result name="redirect" type="dispatcher">/login.jsp</result>


2.2 action中直接重定向

在action中获取到Servlet的response对象,使用sendRedirect()方法,问题仍然没办法解决。

//无效代码
ServletActionContext.getResponse().sendRedirect("login.jsp");


三、发现原因

frameset的target属性是用于指定页面跳转的方式,比如:

属性值描述
_blank默认,在新窗口中打开被链接文档
_self在相同的框架中打开被链接文档
_parent在父框架集中打开被链接文档
_top在整个窗口中打开被链接文档
framename在指定的框架中打开被链接文档
前面的方法都无效,问题在于:

target是客户端的属性,因此只能在客户端指定,和服务器端没有任何关系,所以servlet和struts2都没法直接指定target属性。

四、解决办法

如果一定要后台控制窗口的显示方式,只能通过间接的方式。通过使用servlet的response方法想页面直接回写javascript代码,回写完成后,页面会立即执行js代码。js是客户端的语言,因此可以控制target值。

//有效的解决方案
HttpServletResponse response = ServletActionContext.getResponse();
response.getWriter().write("<script>window.open('login.jsp','_top')</script>");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息