了解Action Phase和Render Phase的执行

时间:2012-07-04 14:24:43

标签: liferay portlet

我正在使用Liferay 6进行门户开发。

通过Liferay Developer Guide,作者解释说Portlet执行有两个阶段

  1. 行动阶段
  2. 渲染阶段
  3. 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方法中的代码)是为每个页面刷新执行的。

    如果我是对的,请告诉我。

1 个答案:

答案 0 :(得分:7)

是的,正确的:有最大值。 1个portlet处理每个请求的一个动作,但是页面上的所有portlet都会有一个渲染请求在运行(除非输出被缓存,但是让我们放弃这个相当高级的东西)

当完成渲染时,对请求也可以有0个动作处理(这是通常在portlet上执行的最常见的操作。在这个阶段你必须(并且可以)不改变任何状态。)。

在Action之后,可以触发事件阶段(参见Portlet-Communication,IPC),可以在任意数量的Portlet上执行。

如果您不想重新加载整页,则必须查看资源阶段,您可以在其中处理AJAX调用并提供除Portlet所指的常用页面片段之外的各种不同资源。投放。