Liferay设置会话并在特定页面上阅读

时间:2012-09-13 00:50:38

标签: java forms session liferay liferay-6

我正在尝试设置可跨页面操作的会话,我能够使用此代码设置会话

HttpSession session1 = request.getSession(false);
String foo = (String) session1.getAttribute("password");
session1.setAttribute("password","authenticated");
out.println(foo);

此代码是用自定义JSP钩子编写的( Journal_content / view.jsp

我还检查了会话是否保存在浏览器上,它就在那里。当我从一个页面转到另一个页面时,我无法阅读会话,所以它要求我输入密码。

有谁能告诉我如何在Liferay中制作这个?。

2 个答案:

答案 0 :(得分:3)

我认为您可以使用PortletSession代替HttpSession,如下所示:

PortletSession portletSession = renderRequest.getPortletSession();
portletSession.setAttribute("password", "authenticated", PortletSession.APPLICATION_SCOPE);

...并且用于获取属性:

String pwd = (String) portletSession.getAttribute("password", PortletSession.APPLICATION_SCOPE);

由于liferay的OOTB portlet在<private-session-attributes>false</private-session-attributes>中定义liferay-portlet.xml,因此上述代码与整个门户共享session

liferay-portlet.xml DTD关于使用<private-session-attributes>的小注释:

  

如果portlet不与门户共享会话属性,请将private-session-attributes值设置为true。默认值是true。 portal.properties中的属性session.shared.attributes指定即使private-session-attributes值为true也共享哪些会话属性。

如果有帮助,请告诉我。

答案 1 :(得分:0)

我已经发布了我的答案here,以便从Hooks到Portlet共享对象。

如果要在portlet之间共享对象,则必须在原始portlet的liferay-portlet.xml文件中设置false。