经过网上查找资料研究,可以肯定超链接产生的iframe跳出的主要原因取决于超链接的target 属性。当target="_blank"时,便会常见新的窗口,属性为 target="_self"时便不会发生跳出的问题。在Liferay的iframe中无法修改,可能需要修改第三方应用的属性。
第二种情况是在提交表单时,会刷新整个页面,将页面跳转到刷新后的页面,丢失原来的页面,也无法返回(有的能返回是因为浏览器的功能问题)。按照网上资料的说法是在表单提交后的session丢失问题。
网上资料的说法:
【因为很多web应用系统,在执行Login操作的后,习惯性的选择redirect操作,这样会强制浏览器中的显示地址变更为转移的地址。事实上这是个很正确的做法,在正常境况下,不会有任何问题,而且还可以很好的防止页面刷新等所带来的问题。但是在Liferay的IFrame Portlet中,web应用这样的Redirect操作,造成了调转到新页面后,session变成了一个新的,从而造成放置在原有session中的login user信息丢失。】
但是我是用自己的web工程在提交之后也是使用redirect的方式提交的,没有出现这个问题。在使用URL嵌入QQ空间的登录时这个问题出现了,在嵌入百度的搜索表单提交时没有问题,但是转移到登录页面是,这个问题又产生了。如果这个问题是资料中所说的session丢失问题,在资料中给出了两种解决方案。两种方案都依赖于第三方web应用。
Login操作后,不采用Redirect方式,而是Dispatcher方式;
Login操作后,依然采用Redirect方式,但将当前的jsessionid赋予新的页面。
Dispatcher方式:
ServletContext sc = getServletContext(); RequestDispatcher rd = null; rd = sc.getRequestDispatcher("/index.jsp"); rd.forward(request, response);
Redirect方式(保持同一个session):
response.sendRedirect(“index.jsp;jsessionid=397BB3656E2A12A96CE3F16E0A89C607”)
注:有一种情况下,无所谓是否采用Redirect方式,这就是在Liferay和webapp在同一个JVM环境下。(没理解)
留言