我正在使用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中显示它,但没有任何显示。
你能分享一下建议吗?
答案 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