<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
     

    前面分析了在頁面上增加一個portlet的服務器端的具體實現,現在分析其在瀏覽器端的實現,JavaScript要出場了。
    前面提到在Add Content中點擊某個portlet的"Add"按鈕,其實就是調用了addPortlet(...)方法。

    top_js.jspf
    ------------------

    function addPortlet(plid, portletId, doAsUserId) {

      var refreshPortletList = getRefreshPortletList();

      if (refreshPortletList["_" + portletId]) {
        self.location = "<%= themeDisplay.getPathMain() %>/portal/update_layout?p_l_id=" + plid + "&p_p_id=" + portletId + "&doAsUserId=" + doAsUserId + "&<%=

    Constants.CMD %>=<%= Constants.ADD %>&referer=<%= HttpUtil.encodeURL(currentURL) %>&refresh=1";
      }
     
      else {
        var loadingDiv = document.createElement("div");
        var container = document.getElementById("layout-column_column-1");

        if (container == null) {
          return;
        }

        loadingDiv.className = "loading-animation";

        container.appendChild(loadingDiv);

        var queryString = "<%= themeDisplay.getPathMain() %>/portal/update_layout?p_l_id=" + plid + "&p_p_id=" + portletId + "&doAsUserId=" + doAsUserId + "&<%=

    Constants.CMD %>=<%= Constants.ADD %>&currentURL=<%= HttpUtil.encodeURL(currentURL) %>";

        /* queryString = /c/portal/update_layout?p_l_id=10102&p_p_id=reports&doAsUserId=&cmd=add&currentURL=%2Fweb%2Fguest%2Fhome */
        /* 這就是最終發送往服務器端的數據了,剛好可以與前面所分析的服務器端收到/c/portal/update_layout后的處理流程對應起來了。*/

        addPortletHTML(queryString, loadingDiv);
      }
    }


    portlet_js.jspf
    --------------------

    function getRefreshPortletList() {

      <%
      List allPortlets = PortletLocalServiceUtil.getPortlets(company.getCompanyId(), false, false);
     
      List nonAjaxPortlets = new ArrayList();

      for (int i = 0; i < allPortlets.size(); i++) {
        Portlet portlet = (Portlet)allPortlets.get(i);

        if (!portlet.isAjaxable()) {
          nonAjaxPortlets.add(portlet.getPortletId());
        }
      }

      StringMaker portletList = new StringMaker();

      for (int i = 0; i < nonAjaxPortlets.size(); i++) {
        portletList.append("_");
        portletList.append(nonAjaxPortlets.get(i));
        portletList.append(":true");
        portletList.append((i < nonAjaxPortlets.size() - 1) ? "," : "");
      }
     %>

      var refreshPortletList = { <%= portletList.toString() %> };
      return refreshPortletList;
    }

    function addPortletHTML(url, placeHolder) {

      var addPortletReturn = function(html) {

        var container = placeHolder.parentNode;

        var addDiv = document.createElement("div");

        addDiv.style.display = "none";

        addDiv.innerHTML = html;

        var portletBound = jQuery(".portlet-boundary:first", addDiv).get(0);

        portletBound.parentNode.removeChild(portletBound);

        var portletId = portletBound.id;

        portletId = portletId.replace(/^p_p_id_/,"");

        portletId = portletId.replace(/_$/,"");

        portletBound.portletId = portletId;

        Liferay.Portlet.flagAjax(portletId);

        container.replaceChild(portletBound, placeHolder);

        Liferay.Util.evalScripts(addDiv);

        if (!jQuery.browser.firefox) {
          Liferay.Util.evalScripts(portletBound);
        }

        <c:if test="<%= (layout != null) && (LayoutPermissionUtil.contains(permissionChecker, layout, ActionKeys.UPDATE)) %>">
          if (!portletBound.isStatic) {
            if (themeDisplay.isFreeformLayout()) {
              Liferay.Freeform.add(portletBound);
            }
            else {
              Liferay.Columns.add(portletBound);
            }
          }
        </c:if>

        if (jQuery.browser.firefox) {
          setTimeout("Liferay.Portlet.process(\"" + portletId + "\")", 0);
        }
        else {
          Liferay.Portlet.process(portletId);
        }

        Liferay.Util.addInputType(portletBound.id);
        Liferay.Util.addInputFocus(portletBound.id);

        if (window.location.hash) {
          window.location.hash = "p_" + portletId;
        }
        return portletId;
      };

      /* addPortletHTML()生成一個Ajax Request,收到Ajax Response后調用addPortletReturn。*/
      AjaxUtil.request(url, {
      onComplete: function(xmlHttpReq){
       addPortletReturn(xmlHttpReq.responseText);
      }
      });
    }

      /* xmlHttpReq.responseText的內容就是該portlet要嵌入portal中的的HTML代碼片段,如下圖所示。在經過addPortletReturn()處理后完成portlet的添加工作*/

     

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

    posted on 2008-03-14 14:14 禮物 閱讀(740) 評論(0)  編輯  收藏 所屬分類: Liferay
    主站蜘蛛池模板: 亚洲国产综合精品一区在线播放| 色婷婷亚洲十月十月色天| 国产精品亚洲五月天高清| 一个人看的www在线免费视频| 毛片无码免费无码播放| 亚洲一区二区视频在线观看 | 青草久久精品亚洲综合专区| 亚洲国产精品成人AV无码久久综合影院| 日本一区午夜艳熟免费| 国产精品亚洲精品青青青| 亚洲精品麻豆av| 久草视频免费在线| 五月婷婷免费视频| 亚洲影视自拍揄拍愉拍| 国产日韩成人亚洲丁香婷婷| 波多野结衣在线免费观看| 男女作爱免费网站| 亚洲videosbestsex日本| 中文字幕人成人乱码亚洲电影| 性xxxxx免费视频播放 | 综合在线免费视频| 成在人线av无码免费高潮水| 亚洲看片无码在线视频| 亚洲AV无码成人精品区在线观看 | 一个人看的www免费高清| 亚洲熟女精品中文字幕| 夜夜亚洲天天久久| 区久久AAA片69亚洲| 在线免费观看一级毛片| 永久看日本大片免费35分钟| aa级毛片毛片免费观看久| 亚洲国产AV一区二区三区四区| 亚洲欧洲综合在线| 日本亚洲欧洲免费天堂午夜看片女人员| 日韩在线免费播放| 91免费国产在线观看| 日本免费高清视频| 久久久久久毛片免费看| 野花视频在线官网免费1| 亚洲国产精品美女久久久久| 亚洲成人黄色网址|