【问题标题】:How to share data between a page and a component in AEM 6.2?如何在 AEM 6.2 中的页面和组件之间共享数据?
【发布时间】:2023-03-26 02:57:01
【问题描述】:

有没有一种方法可以使用相同的数据在 HTL 中调用模型的相同实例? 我想在页面模型中创建一个对象,比如说一个字符串对象,然后在组件模型中使用它。 要创建 bean(或模型实例),我调用

<sly data-sly-use.model="myModel"/>

在页面和组件中 问题是我现在有 2 个实例和 2 组本地数据 - 这是我不想拥有的。

【问题讨论】:

    标签: aem sling-models


    【解决方案1】:

    SlingHttpServletRequest(一般来说)提供了SlingBindings的实例,其中包含对"currentPage"的引用(我使用的是静态字段WCMBindings.CURRENT_PAGE [dependency: groupId: com.adobe.cq.sightly, artifactId: @987654326 @,版本:1.2.30] 在我的示例中)。

    我在示例中使用的Optional 是一个Java 8 类,可用于避免对null 引用进行过多检查。

    final Optional<Page> optional = Optional.ofNullable(request)
            .map(req -> (SlingBindings) req.getAttribute(SlingBindings.class.getName()))
            .map(b -> (Page) b.get(WCMBindings.CURRENT_PAGE));
    

    一个简化/明确的例子是

    Page getCurrentPageFromRequest(@Nonnull final SlingHttpServletRequest request) {
      final SlingBindings bindings = (SlingBindings) request.getAttribute(SlingBindings.class.getName())
      if (bindings == null) {
        return null;
      }
      return (Page) bindings.get(WCMBindings.CURRENT_PAGE);
    }
    

    在您的 Sling 模型中,您只需调用

    @Model(adaptables={ SlingHttpServletRequest.class, })
    public class Model {
    
      public Model(@Nonnull final SlingHttpServletRequest request) {
        final Page currentPage = getCurrentPageFromRequest(request);
        // read properties.
      }
    
      Page getCurrentPageFromRequest(@Nonnull final SlingHttpServletRequest request) {
        final SlingBindings bindings = (SlingBindings) request.getAttribute(SlingBindings.class.getName())
        if (bindings == null) {
          return null;
        }
        return (Page) bindings.get(WCMBindings.CURRENT_PAGE);
      }
    }
    

    【讨论】:

    • 弗洛里安,你是说 SlingHttpServletRequest 吗?
    • 附加:我在公共 Adob​​e Repos 中找不到“cq-wcm-sightly-extension,版本:1.2.30” - 所以我认为它不公开可用?
    • 是的,我做到了 - 修复了它。 cq-wcm-sightly-extension 应该部署在您的 AEM 实例上,可能是不同的版本。
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多