Terry.Li-彬

          虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks
           

          如何在portal中增加一個(gè)portlet (非content_portlet)。

          通過(guò)分析知道,在Add Content中點(diǎn)擊某個(gè)portlet的add按鈕后,服務(wù)器會(huì)收到一個(gè)/c/portal/update_layout...的請(qǐng)求(這里與生成 Add Content Portlet有區(qū)別,在前面文章中提到,那時(shí)的請(qǐng)求是一個(gè)/c/portal/render_portlet...),服務(wù)器在收到請(qǐng)求后前面的步驟同上面分析add content portlet的過(guò)程一樣。

          PortalRequestProcess.process()

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

          ActionMapping mapping = processMapping(request, response, path);
          //這里找到在struts-config.xml中定義的關(guān)于上面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);
          }

          因?yàn)閏md=add,所以調(diào)用LayoutTypePortlet.addPortletId()來(lái)將portletId加入到Layout中,而且最后調(diào)用RenderPortletAction.execute()來(lái)將這個(gè)portlet最終render出來(lái),具體過(guò)程如上面關(guān)于content portlet的分析。

           

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2177387

          posted on 2008-03-14 14:13 禮物 閱讀(705) 評(píng)論(0)  編輯  收藏 所屬分類: Liferay
          主站蜘蛛池模板: 慈溪市| 岳阳县| 开江县| 大兴区| 邯郸县| 体育| 辽宁省| 石柱| 宁海县| 文成县| 勐海县| 萨嘎县| 吴堡县| 禄劝| 报价| 博乐市| 徐水县| 都安| 华亭县| 皮山县| 同德县| 西安市| 泽库县| 秭归县| 壶关县| 大姚县| 建阳市| 诸城市| 泽库县| 启东市| 正蓝旗| 水富县| 浙江省| 石阡县| 兴隆县| 五大连池市| 阳江市| 武威市| 龙胜| 裕民县| 星座|