深入浅出Liferay Portal (7)

如何在portal中增加一个portlet (非content_portlet)。

通过分析知道,在Add Content中点击某个portlet的add按钮后,服务器会收到一个/c/portal/update_layout...的请求(这里与生成Add Content Portlet有区别,在前面文章中提到,那时的请求是一个/c/portal/render_portlet...),服务器在收到请求后前面的步骤同上面分析add content portlet的过程一样。

PortalRequestProcess.process()

String path = processPath(request, response);
//这里path = “/portal/update_layout”.

ActionMapping mapping = processMapping(request, response, path);
//这里找到在struts-config.xml中定义的关于上面path的mapping.

Action action = processActionCreate(request, response, mapping);
//这里生成了UpdateLayoutAction.

ActionForward forward = processActionPerform(request, response, action, form, mapping);

processForwardConfig(request, response, forward);

在struts-config.xml中有定义:
<action path="/portal/update_layout" type="com.liferay.portal.action.UpdateLayoutAction" />

UpdateLayoutAction.execute()

LayoutTypePortlet layoutTypePortlet = themeDisplay.getLayoutTypePortlet();

String cmd = ParamUtil.getString(req, Constants.CMD);

String portletId = ParamUtil.getString(req, "p_p_id");

if (cmd.equals(Constants.ADD))
{  portletId = layoutTypePortlet.addPortletId(userId, portletId); }
else if (cmd.equals(Constants.DELETE)) { layoutTypePortlet.removePortletId(portletId); }
else if (cmd.equals("drag")) { }
else if (cmd.equals("minimize")) { }
else if (cmd.equals("move")) { layoutTypePortlet.movePortletId(userId, portletId, columnId, columnPos); }
else if (cmd.equals("template")) { }

if (ParamUtil.getBoolen(req, "refresh")) {}
else {
  if (cmd.equals(Constants.ADD) && (portletId != null)) {
  Action renderPortletAction = (Action)InstancePool.get(RenderPortletAction.class.getName());
  renderPortletAction.execute(mapping, form, dynamicReq, res);
}

因为cmd=add,所以调用LayoutTypePortlet.addPortletId()来将portletId加入到Layout中,而且最后调用RenderPortletAction.execute()来将这个portlet最终render出来,具体过程如上面关于content portlet的分析。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值