通过会话将属性从一个portlet传递到另一个portlet

时间:2013-11-21 08:48:37

标签: java spring session spring-mvc liferay

我正在使用Spring-MVC和Liferay,我需要通过会话将属性从一个portlet传递给另一个。

我是否需要使用HttpSession代替PortletSession,或者APPLICATION_SCOPE设置是否足够?

我需要做两件事

  • 将参数设置为共享/应用程序会话

  • 从会话中读取它并使用Spring Model

  • 将其传递给视图

我正试图像这样做第一个:

PortletSession session = request.getPortletSession();
session.setAttribute("foo", request.getParameter("foo"), 
    PortletSession.APPLICATION_SCOPE);
response.sendRedirect("/somewhere");

然后第二个像这样:

@RequestMapping
public String view(PortletSession session, Model model){
    if (session.getAttribute("foo") != null) {
        model.addAttribute("foo", session.getAttribute("foo").toString());
    }
return "somewhere/view";
}

然后我尝试仅使用${foo}在我的JSP中显示它,但没有任何显示。

你能分享一下建议吗?

1 个答案:

答案 0 :(得分:1)

我试图以糟糕的方式从会话中获取属性。我也需要在从PortletSession检索属性时指定范围。

将其更改为

@RequestMapping
public String view(RenderRequest request, Model model){
    PortletSession session = request.getPortletSession();
    if (session.getAttribute("foo", 
            PortletSession.APPLICATION_SCOPE) != null) {
        model.addAttribute("foo", session.getAttribute("foo", 
            PortletSession.APPLICATION_SCOPE).toString());
    }
    return "somewhere/view";
}

修复了问题。

还需要在两个portlet 模块中的liferay-portlet.xml中将私有会话属性设置设置为false,如下所示:

<portlet>
    <!-- ..some previous settings and then -->
    <private-session-attributes>false</private-session-attributes>
</portlet>

Doc:http://www.liferay.com/community/wiki/-/wiki/Main/Portlet+to+Portlet+Communication