2016-03-17 22 views
0

我有我從一個servlet使用選擇填充一個國家選擇下拉菜單:AEM:如何通過從JSP當前頁面的路徑對話框

目前我傳遞的語言環境作爲請求參數。

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

現在我想傳遞一個區域設置作爲另一個選擇器。爲此,我正在考慮一種方法,將currentPage.path從jsp轉換爲對話框,並將其作爲第二選擇器傳遞。我怎樣才能做到這一點 ?

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

有沒有辦法,我應該能夠得到我的servlet的頁面路徑,我可以用它來觸發這個servlet

回答

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

的Java:

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

How to get currentPagePath in Slingservlet?

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文件。

相關問題