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

Content management system AEM:如何将当前页面路径从jsp传递到对话框,content-management-system,aem,Content Management System,Aem,我有一个国家选择下拉列表,我使用选择器从servlet填充该下拉列表: 目前,我正在将区域设置作为请求参数传递 options="/bin/services/dropdownservlet.GET_DROPDOWN_VALUES.json?locale=$PATH" 现在我想传递一个区域设置作为另一个选择器。为此,我正在考虑一种方法,从jsp to对话框获取currentPage.path,并将其作为第二个选择器传递。我该怎么做 options="/bin/services/dropdowns

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

目前,我正在将区域设置作为请求参数传递

options="/bin/services/dropdownservlet.GET_DROPDOWN_VALUES.json?locale=$PATH"
现在我想传递一个区域设置作为另一个选择器。为此,我正在考虑一种方法,从jsp to对话框获取
currentPage.path
,并将其作为第二个选择器传递。我该怎么做

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

是否有一种方法可以将servlet中的页面路径作为字符串获取,我可以使用该字符串触发servlet

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

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();
Java:

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

请参见假设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)));
    }"/>
但是,我不会使用路径作为选择器。使用页面路径中的斜杠,Sling将页面路径视为扩展名和后缀,而不是选择器。我可能会像您当前所做的那样,将路径作为后缀或查询参数传入

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