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

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

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

    Terry.Li-彬

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

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

    前面分析了在頁面上增加一個portlet的服務(wù)器端的具體實現(xiàn),現(xiàn)在分析其在瀏覽器端的實現(xiàn),JavaScript要出場了。
    前面提到在Add Content中點擊某個portlet的"Add"按鈕,其實就是調(diào)用了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 */
        /* 這就是最終發(fā)送往服務(wù)器端的數(shù)據(jù)了,剛好可以與前面所分析的服務(wù)器端收到/c/portal/update_layout后的處理流程對應(yīng)起來了。*/

        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后調(diào)用addPortletReturn。*/
      AjaxUtil.request(url, {
      onComplete: function(xmlHttpReq){
       addPortletReturn(xmlHttpReq.responseText);
      }
      });
    }

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

     

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

    posted on 2008-03-14 14:14 禮物 閱讀(740) 評論(0)  編輯  收藏 所屬分類: Liferay
    主站蜘蛛池模板: 亚洲日韩国产精品乱-久| 国产午夜无码精品免费看| 国产精品亚洲产品一区二区三区| 美女巨胸喷奶水视频www免费| 亚洲福利视频网站| 免费国产怡红院在线观看| 四只虎免费永久观看| 9久久免费国产精品特黄| 亚洲人成片在线观看| 亚洲色婷婷综合开心网| 1000部啪啪毛片免费看| 日韩一区二区三区免费播放| 日本久久久久亚洲中字幕| 免费视频成人手机在线观看网址| 亚洲国产午夜精品理论片| 亚洲欧洲精品成人久久曰影片 | 亚洲成片观看四虎永久| 美女被羞羞网站免费下载| 亚洲AV日韩AV天堂一区二区三区| 夫妻免费无码V看片| 一区二区三区在线免费看| 男男gay做爽爽免费视频| 亚洲伊人久久大香线蕉在观| 亚洲视频一区二区| 成人免费无毒在线观看网站| 一区二区三区在线免费看| 乱人伦中文视频在线观看免费| 在线免费观看韩国a视频| 无码国产精品一区二区免费模式 | 亚洲视频一区在线播放| 亚洲国产成人乱码精品女人久久久不卡| 2019中文字幕免费电影在线播放| 亚洲视频在线免费| 日韩色视频一区二区三区亚洲| 色久悠悠婷婷综合在线亚洲| 天天看片天天爽_免费播放| 亚洲精品视频免费在线观看| 99热在线日韩精品免费| 永久免费精品影视网站| 色欲色欲天天天www亚洲伊| 精品亚洲成在人线AV无码|