【问题标题】:Understanding the execution of Action Phase and Render Phase了解 Action Phase 和 Render Phase 的执行
【发布时间】:2012-07-04 14:24:43
【问题描述】:

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

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

  1. 行动阶段
  2. 渲染阶段
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方法被称为“Render Phase”,processAction方法被称为“Action Phase”。

如果页面上显示了 5 个 portlet,则每次页面刷新都会执行“渲染阶段”(即 doView 方法中的代码)。

如果我是正确的,请告诉我。

【问题讨论】:

    标签: liferay portlet


    【解决方案1】:

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

    在刚刚完成渲染时,也可以对请求进行 0 次操作处理(这是通常在 portlet 上执行的最常见操作。您必须(并且不能)在此阶段不更改任何状态。)。

    在操作之后,可以触发可以在任意数量的 portlet 上执行的事件阶段(请参阅 Inter-Portlet-Communication,IPC)。

    如果您不想重新加载整个页面,则必须查看资源阶段,在该阶段您可以处理 AJAX 调用并提供各种不同的资源,而不是 portlet 旨在处理的常见页面片段发球。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多