AEM:如何将当前页面路径从jsp传递到对话框

时间:2016-03-17 05:36:59

标签: content-management-system cq5 aem

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

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

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

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

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

有没有办法让我能够将servlet中的页面路径作为字符串获取,我可以使用它来触发servlet

2 个答案:

答案 0 :(得分:0)

以下是获取页面页面的方法,包括客户端或服务器端:

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

<强>爪哇:

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

请参阅How to get currentPagePath in Slingservlet?

答案 1 :(得分:0)

假设您的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文件中。