【问题标题】:AEM: How to dynamically get the current page path and pass it to the request parameter for drop downAEM:如何动态获取当前页面路径并将其传递给请求参数以进行下拉
【发布时间】:2016-03-10 15:40:38
【问题描述】:

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

如果我输入 locale=en-us 它工作正常,

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

【问题讨论】:

    标签: content-management-system aem


    【解决方案1】:

    因此,您的 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 将在 currentpage 或其祖先中查找 jcr:language 属性。当您将页面(通常在根区域设置页面中设置)的页面属性(高级选项卡)中的语言字段设置为适当的值时,将设置此属性。 eg: 如果你设置语言为english(us),jcr:language 将是en_us。

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

    【讨论】:

      【解决方案2】:

      com.day.cq.wcm.api.Page.getLanguage(false) 将返回页面或发送它的第一个父页面上的 jcr:language 属性的值。通常这不是在每个页面上设置的。

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

      我通常有一个自定义的 taglib 函数,以使其更容易通过 EL 访问。但作为一个 scriptlet,我希望以下内容会起作用:

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

      【讨论】:

      • 我猜你理解 OP 的问题是错误的。查询是如何动态地将语言环境传递给 servlet,该 servlet 为对话框中的选择小部件提供选项。
      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2019-02-11
      • 2015-04-04
      • 1970-01-01
      • 2018-11-06
      • 2020-06-07
      • 1970-01-01
      相关资源
      最近更新 更多