我正在使用Liferay 6进行门户开发。
通过Liferay Developer Guide,作者解释说Portlet执行有两个阶段
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().println("<BR/>");
PortletURL u = res.createActionURL();
res.getWriter().println("<A href=" + u + ">Trigger an action.");
res.getWriter().close();
}
public void processAction(ActionRequest req, ActionResponse res) throws PortletException
{
req.setAttribute("datetime",new Date());
}
}
我的理解是doView
方法被称为&#34; 渲染阶段&#34; processAction
方法称为&#34; 行动阶段&#34;。
如果页面上显示5个portlet,那么&#34;渲染阶段&#34; (即doView
方法中的代码)是为每个页面刷新执行的。
如果我是对的,请告诉我。
答案 0 :(得分:7)
是的,正确的:有最大值。 1个portlet处理每个请求的一个动作,但是页面上的所有portlet都会有一个渲染请求在运行(除非输出被缓存,但是让我们放弃这个相当高级的东西)
当完成渲染时,对请求也可以有0个动作处理(这是通常在portlet上执行的最常见的操作。在这个阶段你必须(并且可以)不改变任何状态。)。
在Action之后,可以触发事件阶段(参见Portlet-Communication,IPC),可以在任意数量的Portlet上执行。
如果您不想重新加载整页,则必须查看资源阶段,您可以在其中处理AJAX调用并提供除Portlet所指的常用页面片段之外的各种不同资源。投放。