我正在使用Liferay 6进行门户开发.
通过Liferay开发人员指南,作者解释了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());
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是该doView
方法被称为" 渲染阶段 ",该processAction
方法被称为" 动作阶段 ".
如果页面上显示5个portlet,doView
则会为每个页面刷新执行"渲染阶段"(即" 方法"中的代码).
如果我是对的,请告诉我.
是的,正确的:有最大值.1个portlet处理每个请求的一个动作,但是页面上的所有portlet都会有一个渲染请求在运行(除非输出被缓存,但是让我们放弃这个相当高级的东西)
在完成渲染时,对请求也可以有0个动作处理(这是通常在portlet上执行的最常见操作.在这个阶段你必须(并且可以)不改变任何状态.).
在Action之后,可以触发事件阶段(参见Portlet-Communication,IPC),可以在任意数量的Portlet上执行.
如果你不想重新加载整个页面,你就必须考虑资源相在那里你可以处理AJAX调用和服务于各种比一个portlet是为了服务于通常的页面片段等不同的资源.
归档时间: |
|
查看次数: |
2957 次 |
最近记录: |