<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

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

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

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

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

    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);
    }

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

     

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

    posted on 2008-03-14 14:13 禮物 閱讀(695) 評論(0)  編輯  收藏 所屬分類: Liferay
    主站蜘蛛池模板: 亚洲人成在线播放| 成人性生交大片免费看无遮挡| 亚洲一日韩欧美中文字幕在线| 亚洲精品字幕在线观看| 尤物永久免费AV无码网站| 91高清免费国产自产| a级毛片在线免费看| 黄网站色成年片大免费高清| 一本色道久久88—综合亚洲精品| 亚洲国产高清视频| 亚洲国产精品福利片在线观看| 亚洲av区一区二区三| 日韩免费视频播播| 成人免费男女视频网站慢动作| 国产精品成人免费福利| 999任你躁在线精品免费不卡| 一区二区三区无码视频免费福利| 成在线人直播免费视频| 免费人成动漫在线播放r18 | 九九免费久久这里有精品23| 亚洲美国产亚洲AV| 亚洲人成网亚洲欧洲无码| 7777久久亚洲中文字幕| jlzzjlzz亚洲jzjzjz| 99热亚洲色精品国产88| 亚洲人精品亚洲人成在线| 亚洲国产成人资源在线软件| 亚洲小说区图片区| 亚洲人成网站日本片| 亚洲欧洲国产综合| 久久精品国产亚洲AV忘忧草18| 亚洲专区中文字幕| 亚洲 欧洲 视频 伦小说| 亚洲一线产区二线产区区| 亚洲精品无码久久久久秋霞| 久久亚洲AV成人无码国产电影 | 少妇亚洲免费精品| 亚洲国产精品综合久久一线| 亚洲区小说区图片区| a级亚洲片精品久久久久久久| 国产精品亚洲成在人线|