当我遇到以下概念时,我正在检查一些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());
}
}
实际上我并不明白为什么会发生这种情况....在动作方法之后总是调用渲染方法吗? ....所以他们在相同的范围内运行?
答案 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");