我有一个国家选择下拉列表,我使用选择器从servlet填充:
目前我正在将语言环境作为请求参数传递。
options="/bin/services/dropdownservlet.GET_DROPDOWN_VALUES.json?locale=$PATH"
现在我想将一个语言环境作为另一个选择器传递。为此我想到了一种从jsp到对话框获取currentPage.path
并将其作为第二选择器传递的方法。我怎么能这样做?
options="/bin/services/dropdownservlet.GET_DROPDOWN_VALUES.CURRENTPATH"
有没有办法让我能够将servlet中的页面路径作为字符串获取,我可以使用它来触发servlet
答案 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();
答案 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文件中。