【问题标题】:AEM: how to pass current page path from jsp to dialogAEM:如何将当前页面路径从 jsp 传递到对话框
【发布时间】:2016-03-17 05:36:59
【问题描述】:

我有一个国家/地区选择下拉列表,我使用选择器从 servlet 填充它:

目前我将语言环境作为请求参数传递。

options="/bin/services/dropdownservlet.GET_DROPDOWN_VALUES.json?locale=$PATH"

现在我想将语言环境作为另一个选择器传递。为此,我正在考虑一种将 currentPage.path 从 jsp 获取到对话框并将其作为第二个选择器传递的方法。我该怎么做?

options="/bin/services/dropdownservlet.GET_DROPDOWN_VALUES.CURRENTPATH"

有没有一种方法可以让我的 servlet 中的页面路径作为一个字符串来触发 servlet

【问题讨论】:

    标签: content-management-system aem


    【解决方案1】:

    以下是获取页面页面的方法,无论是客户端还是服务器端:

    JavaScript:

    var currentPagePath = null;
    /* if accessed via siteadmin */
    if(CQ.wcm.SiteAdmin.hasListSelection()) {
        var grid = CQ.wcm.SiteAdmin.getActiveGrid();
        var selections = grid.getSelectionModel().getSelections();
    
        /*Assuming that you are selecting only one page at a time. */
        currentPagePath = selections[0].id;
    } else { /* accessed via page */
        currentPagePath = CQ.WCM.getPagePath();
    }
    

    Java:

    PageManager pageManager = resourceResolver.adaptTo(PageManager.class);    
    String callingPage = request.getParameter("callingPage");
    String callingPagePath = pageManager.getPage(callingPage).getPath();
    

    How to get currentPagePath in Slingservlet?

    【讨论】:

      【解决方案2】:

      假设您的 servlet 返回 JSON,例如:

      [{"text" : "first option", "value" : "alpha"}, {"text" : "second option", "value" : "bravo"}]
      

      您可以使用 optionsProvider 来运行一个 JavaScript 函数,您可以在其中动态设置您的请求:

      <product
          jcr:primaryType="cq:Widget"
          name="./product"
          fieldLabel="Product"
          type="select"
          xtype="selection"
          optionsProvider="function() {
              var selectors = ['GET_DROPDOWN_VALUES', 'myselector'];
              var url = CQ.shared.HTTP.addSelectors('/bin/services/dropdownservlet.json', selectors);
              return CQ.Util.formatData(CQ.shared.HTTP.eval(CQ.shared.HTTP.noCaching(url)));
          }"/>
      

      要回答您的问题,您可以通过以下方法在您的 optionsProvider 函数中获取当前页面的路径:

      CQ.shared.HTTP.getPath()
      

      但是,我不会使用路径作为选择器。通过页面路径中的斜线,Sling 会将页面路径视为扩展名和后缀,而不是选择器。我可能会像您当前所做的那样将路径作为后缀或查询参数传递。

      请注意,我不会将 JavaScript 函数留在您的 dialog.xml 文件中,而是会将其移动到外部 JS 文件中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        相关资源
        最近更新 更多