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

时间:2016-03-10 15:40:39

标签: content-management-system cq5 aem

选项= / bin中/服务/ myservlet.GET_DROPDOWN_VALUES.json?区域= 'some_locale'

如果我把locale = en-us设置得很好,

如何动态获取当前页面区域设置并将其传递给请求参数?

2 个答案:

答案 0 :(得分:1)

因此,您的servlet需要locale作为检索下拉列值的参数之一。我可以想到两个选项来做到这一点。

  1. 使用$ Path作为参数之一调用servlet。 $ Path将为您提供完整的页面路径,直到jcr:content。 options=/bin/services/myservlet.GET_DROPDOWN_VALUES.json?compNode=$PATH
  2. 在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属性。将页面的页面属性(高级选项卡)中的“语言”字段(通常在根区域设置页面中设置)设置为适当的值时,将设置此属性。例如:如果您将语言设置为英语(我们),则jcr:语言将为en_us。

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

答案 1 :(得分:0)

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)%>