【发布时间】:2016-03-10 15:40:38
【问题描述】:
options=/bin/services/myservlet.GET_DROPDOWN_VALUES.json?locale='some_locale'
如果我输入 locale=en-us 它工作正常,
如何动态获取当前页面语言环境并将其传递给请求参数?
【问题讨论】:
标签: content-management-system aem
options=/bin/services/myservlet.GET_DROPDOWN_VALUES.json?locale='some_locale'
如果我输入 locale=en-us 它工作正常,
如何动态获取当前页面语言环境并将其传递给请求参数?
【问题讨论】:
标签: content-management-system aem
因此,您的 servlet 需要语言环境作为检索下拉值的参数之一。我可以想到 2 个选项来做到这一点。
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 将在 currentpage 或其祖先中查找 jcr:language 属性。当您将页面(通常在根区域设置页面中设置)的页面属性(高级选项卡)中的语言字段设置为适当的值时,将设置此属性。 eg: 如果你设置语言为english(us),jcr:language 将是en_us。
【讨论】:
com.day.cq.wcm.api.Page.getLanguage(false) 将返回页面或发送它的第一个父页面上的 jcr:language 属性的值。通常这不是在每个页面上设置的。
如果您在 JSP 中包含了 Adobe 的 global.jsp 或使用了 <cq:defineObjects/> 标签,您应该会发现“currentPage”已经在范围内,提供对 Page 对象的访问。
我通常有一个自定义的 taglib 函数,以使其更容易通过 EL 访问。但作为一个 scriptlet,我希望以下内容会起作用:
<%= ((Page)getPageContext().getAttribute("currentPage")).getLanguage(false)%>
【讨论】: