AEM:如何动态获取当前页面路径并将其传递给下拉请求参数

AEM: How to dynamically get the current page path and pass it to the request parameter for drop down

选项=/bin/services/myservlet.GET_DROPDOWN_VALUES.json?locale='some_locale'

如果我输入 locale=en-us 就可以正常工作,

如何动态获取当前页面语言环境并将其传递给请求参数?

com.day.cq.wcm.api.Page.getLanguage(false) 将 return 页面上 jcr:language 属性 的值或发送到的第一个父页面。一般不会在每个页面都设置。

如果您在 JSP 中包含了 Adob​​e 的 global.jsp 或使用了 <cq:defineObjects/> 标签,您应该会发现 "currentPage" 已经在范围内,提供对页面对象。

我一般都有自定义的taglib函数,方便通过EL访问。但作为一个小脚本,我希望以下内容会起作用:

<%= ((Page)getPageContext().getAttribute("currentPage")).getLanguage(false)%>

因此,您的 servlet 需要将语言环境作为参数之一来检索下拉值。我可以想到 2 个选项来做到这一点。

  1. 以 $Path 作为参数之一调用 servlet。 $Path 将为您提供完整的页面路径,一直到 jcr:content。 options=/bin/services/myservlet.GET_DROPDOWN_VALUES.json?compNode=$PATH.

在您的 servlet 中,使用 $PATH 构造页面对象,然后如 @jwepurchase 所述,使用 page.getLanguage(false) 获取语言环境。

String compNodePath = (String) request.getParameter("compNode");  
String pagePath = StringUtils.substringBefore(compNodePath, "jcr:content");  
PageManager pageMgr = request.getResourceResolver().adaptTo(PageManager.class);  
Page page = pageMgr.getContainingPage(pagePath);  
Locale pageLocale = page.getLanguage(false);

getLanguage 将在当前页面或其祖先页面中查找 jcr:language 属性。当您将页面的页面属性(高级选项卡)中的语言字段(通常在根语言环境页面中设置)设置为适当的值时,就会设置此 属性。例如:如果您将语言设置为英语(美国),jcr:language 将是 en_us。

  1. 与选项 1 类似的步骤,如果未设置页面 属性 中的值,您可以使用 currentPage.getAbsoluteParent(DEPTH_VAL) 检索语言环境值。虽然不是推荐的解决方案。