为什么请求属性不会从操作传播到portlet中呈现?

时间:2016-09-01 08:08:48

标签: liferay portlet portal

当我遇到以下概念时,我正在检查一些Portlet教程:

  

由于分离的操作和呈现模型,操作请求属性将不会在呈现阶段(JSP,Servlet等)中包含的任何视图组件中可用

并且提到的代码如下:

public class DateTimePortlet extends GenericPortlet {

public void doView(RenderRequest req, RenderResponse res) throws IOException, PortletException {        
    Object actionAttribute = req.getAttribute("datetime");
    res.getWriter().println("Date Time:" + (actionAttribute != null ? actionAttribute :"Unavailable"));
    res.getWriter().close();
}

public void processAction(ActionRequest req, ActionResponse res) throws PortletException {
    req.setAttribute("datetime",new Date());
}        
}

实际上我并不明白为什么会发生这种情况....在动作方法之后总是调用渲染方法吗? ....所以他们在相同的范围内运行?

1 个答案:

答案 0 :(得分:3)

请求的属性仅涉及请求自身。如果要将操作阶段中的信息传递给渲染阶段,可以多次调用此方法:

MyObject

在RenderPhase之后你可以获得信息:

actionResponse.setRenderParameter("parameter-key","value");

还有其他方法可以使用请求会话或使用Liferay Portlet首选项。例如:

renderRequest.getParameter("parameter-key");

之后:

actionRequest.getPortletSession().setAttribute("session-key",value);
actionRequest.getPreferences().setValue("preferences-key","value");