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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

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

    上回說到/c/portal/render_portlet請求經過MVC過程后會到達render_portlet.jsp。

    render_portlet.jsp
    -------------------------

    Portlet portlet = (Portlet)request.getAttribute(WebKeys.RENDER_PORTLET);
    cachePortlet = PortletInstanceFactory.create(portlet, application);
    cachePortlet.render(renderRequestImpl, renderResponseImpl);

    CachePortlet.render()

    _invoke(req, res, false);
    CachePortlet._invoke()
    if (action)
      _portlet.processAction(...)
    else
      _portlet.render(...);

    // 因為87 portlet是一個StrutsPortlet,在這里會調用StrutsPortlet.render()方法,由于StrutsPortlet和 LiferayPortlet中都沒有定義render()方法,最終調用的是GenericPortlet.render()方法。


    GenericPortlet.render()

    response.setTitle(getTitle(request));
    doDispatch(request, response);

    //由于LiferayPortlet中覆蓋了doDispatch()方法,所以調用的是LiferayPortlet.doDispatch()

    LiferayPortlet.doDispatch()

      if (mode.equals(PortletMode.VIEW)) {
        doView(req, res);
      }
      else if (mode.equals(LiferayPortletMode.ABOUT)) {
        doAbout(req, res);
      }
      else if (mode.equals(LiferayPortletMode.CONFIG)) {
        doConfig(req, res);
      }
      .......

    //由于StrutsPortlet中重載了doView, doAbout等方法,所以調用的是StrutsPortlet中的各種doXXX()方法,下面以doView()為例
    // 另外有可能會有別的類型的portlet,例如liferay的JSPPortlet,從而會調用JSPPortlet.doXXX()方法。在 JSPPortlet.doView中,調用include(viewJSP, req, res);而viewJSP = getInitParameter("view-jsp");所以在這個地方就可以把該JSPPortlet定義好的view.jsp直接include 進來,沒有如同StrutsPortlet的后續工作。

    StrutsPortlet.doView()

    include(req, res);

    //StrutsPortlet中其他的doXXX()方法都會最后調用include()方法。

    StrutsPortlet.include()

    PortletRequestProcessor processor = _getPortletRequestProcessor(req);
    processor.process(req, res);
    PortletRequestProcessor.process(RenderRequest req, RenderResponse res)
    //這里PortletRequestProcessor有兩個process方法,一個處理RenderRequest,另一個處理ActionRequest。

    HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(req);
    HttpServletResponse httpRes = PortalUtil.getHttpServletResponse(res);

    process(httpReq, httpRes);
    // 由于PortletRequestProcessor和TilesRequestProcessor中都沒有重載process (HttpServletReq, HttpServletRes),調用的是RequestProcessor的process()方法。

    RequestProcessor.process(HttpServletRequest, HttpServletResponse)


    String path = processPath(request, response); //這里是/layout_configuration/view
    ActionMapping mapping = processMapping(request, response, path);
    processForward(request, response, mapping)
    processInclude(request, response, mapping)
    ActionForward forward = processActionPerform(request, response, action, form, mapping);
    ……


    protected void doInclude( String uri, HttpServletRequest request, HttpServletResponse response)
    {
      RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);
      rd.include(request, response);
    }

    portlet-custom.xml中定義了:
    <portlet>
      <portlet-name>87</portlet-name>
      <display-name>Layout Configuration</display-name>
        <portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class>
        <init-param>
          <name>view-action</name>
          <value>/layout_configuration/view</value>
        </init-param>
        .....
    </portlet>

    struts-config.xml中定義了action:

    <action path="/layout_configuration/view" forward="portlet.layout_configuration.view" />

    tiles-def.xml中定義了view.jsp:

    <definition name="portlet.layout_configuration.view" extends="portlet.layout_configuration"> 
      <put name="portlet_content" value="/portlet/layout_configuration/view.jsp" />
    </definition>

    最后完成了萬里長征,到達了/layout_configuration/view.jsp。

    /layouot_configuration/view.jsp
    -------------------------------------------

        <%
         PortletCategory portletCategory = (PortletCategory)WebAppPool.get(String.valueOf(company.getCompanyId()), WebKeys.PORTLET_CATEGORY);

         List categories = ListUtil.fromCollection(portletCategory.getCategories());

         Collections.sort(categories, new PortletCategoryComparator(company.getCompanyId(), locale));

         Iterator itr = categories.iterator();

         while (itr.hasNext()) {
          request.setAttribute(WebKeys.PORTLET_CATEGORY, itr.next());
         %>

          <liferay-util:include page="/html/portlet/layout_configuration/view_category.jsp" />

         <%
         }
         %>

    /layouot_configuration/view_category.jsp
    -----------------------------------------------------------

    <%
    itr2 = portlets.iterator();

    while (itr2.hasNext()) {
      Portlet portlet = (Portlet)itr2.next();
      divId = new StringMaker();
      divId.append(newCategoryPath);
      divId.append(":");
      matcher = pattern.matcher(PortalUtil.getPortletTitle(portlet, application, locale));
      while (matcher.find()) {
        divId.append(matcher.group());
      }
    %>

    <div class="layout_configuration_portlet" id="<%= divId %>">
      <table border="0" cellpadding="2" cellspacing="0" width="100%">
        <tr>
          <td width="99%">
            <%= PortalUtil.getPortletTitle(portlet, application, locale) %>
          </td>
          <td align="right">
            <input type="button" value="<liferay-ui:message key="add" />"
             onClick="addPortlet('<%= plid%>', '<%= portlet.getPortletId() %>', '<%= themeDisplay.getDoAsUserId() %>');
             if (<%= !portlet.isInstanceable() %>) {
              var div = document.getElementById('<%= divId %>');
              div.parentNode.removeChild(div);
            };"
     >
          </td>
        </tr>
      </table>
    </div>
    <%
    }
    %>

    在view_category.jsp 中列出了每個category中所包含的portlet列表,一旦點擊了"add"按鈕,會調用addPortlet()方法在頁面上增加一個 portlet。在view_category.jsp中還實現了輸入關鍵字對portlet進行過濾的功能。

     

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

    posted on 2008-03-14 14:12 禮物 閱讀(1197) 評論(0)  編輯  收藏 所屬分類: Liferay
    主站蜘蛛池模板: 国产精品白浆在线观看免费| 成人毛片免费观看视频大全| 亚洲五月综合缴情婷婷| 国产日产成人免费视频在线观看| av电影在线免费看| 亚洲国产日韩在线人成下载| 国产在线19禁免费观看国产 | 亚洲成AV人片在线观看ww| 免费下载成人电影| 成人国产网站v片免费观看| 久久精品九九亚洲精品| 免费无遮挡无码永久在线观看视频| 久久免费视频一区| 亚洲熟女综合色一区二区三区| 亚洲精品无码乱码成人| 四虎成人免费网站在线| 九九美女网站免费| 国产尤物在线视精品在亚洲| 久久精品国产亚洲av水果派| 亚洲A丁香五香天堂网| 在线观看H网址免费入口| 久久精品无码专区免费| 亚洲精品乱码久久久久久V| 亚洲AV日韩AV永久无码下载| 国产一区二区三区在线观看免费 | 免费视频成人国产精品网站| 亚洲成a人不卡在线观看| 中文字幕无码精品亚洲资源网| 性色av无码免费一区二区三区| 男人都懂www深夜免费网站| 污污污视频在线免费观看| 亚洲精品国产国语| 亚洲高清视频在线播放| 亚洲精品成人片在线观看精品字幕| 日本高清免费网站| 欧美日韩国产免费一区二区三区 | 亚洲精品国产va在线观看蜜芽| 久久不见久久见免费影院| 久久久久久国产精品免费无码| 色www永久免费网站| 一级成人a做片免费|