0

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

通过阅读Liferay 开发人员指南,作者解释说 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方法称为“渲染阶段”,该processAction方法称为“操作阶段”。

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

请让我知道我是否正确。

4

1 回答 1

7

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

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

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

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

于 2012-07-04T16:49:55.110 回答