[英]Attribute set in portlet session is not available in servlet session
在Liferay论坛上发贴: https : //www.liferay.com/community/forums/-//message_boards/message/47412302
我在JSR-286 Portlet中有一个简单的应用程序设置,以从Portlet
session.attribute
检索值。
doView()方法:
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws PortletException, IOException
{
renderResponse.setContentType("text/html");
getFormBean(renderRequest.getPortletSession());
PortletURL renderUrl = renderResponse.createRenderURL();
renderUrl.setWindowState(WindowState.MAXIMIZED);
PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(this.viewUrl);
dispatcher.include(renderRequest, renderResponse);
}
我在TestPortlet.java中设置属性:
private void getFormBean(PortletSession session)
{
String testVar = (String)session.getAttribute("testAttr", 1);
if (null == testVar) {
System.out.println("Setting Attribute inside Portlet");
session.setAttribute("testAttr", "TESTING SESSION", 1);
}
}
并在TestServlet.java(相同的包)中检索属性:
private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String testVal = (String) request.getSession(true).getAttribute("testAttr");
System.out.println("Test Attribute from Servlet:"+testVal);
}
应用程序的输出返回null
Setting Attribute in Portlet
Test Attribute from Servlet:null
输出应为:
Test Attribute from Servlet:TESTING SESSION
该应用程序可以在我的本地设置上运行,但是不能在配置几乎相同的远程服务器上运行。 我已经在tomcat / lib中包含了javax-servlet-api-3.1.0来检索HttpServletRequest
类,但还没有发现其他可能缺少的东西。 我也没有看到任何Exception / ClassNotFound错误。
是否有任何类型的服务器配置可能会干扰会话? (身份验证,网络配置,安全性)
本地设置
远端设定
如果要在同一应用程序中的portlet和servlet之间共享会话数据(战争),则必须将属性放在应用程序范围内,如下所示:
portletSession.setAttribute("testAttr", "TESTING SESSION", PortletSession.APPLICATION_SCOPE);
然后还使用范围在portlet中检索它:
portletSession.getAttribute("testAttr", PortletSession.APPLICATION_SCOPE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.