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

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

一、问题描述

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

二、尝试的无效方法

2.1 struts2的result标签

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


<result name="logout_success" type="dispatcher">/login.jspresult>

或者


<result name="redirect" type="dispatcher">/login.jspresult>

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("");

你可能感兴趣的:(Java问题解决)