如何在AEM 6.2中的页面和组件之间共享数据?

如何在AEM 6.2中的页面和组件之间共享数据?,aem,sling-models,Aem,Sling Models,有没有办法使用相同的数据调用HTL中模型的相同实例? 我想在页面的模型中创建一个对象,比如说一个字符串对象,然后在组件的模型中使用它。 要创建bean或模型实例,我调用 <sly data-sly-use.model="myModel"/> 在页面和组件中 问题是,我现在有2个实例,其中包含2组本地数据,这是我不想要的。SlingHttpServletRequest通常提供SlingBindings实例,其中包含对currentPage的引用,我正在使用静态字段WCMBinding

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

<sly data-sly-use.model="myModel"/>
在页面和组件中 问题是,我现在有2个实例,其中包含2组本地数据,这是我不想要的。

SlingHttpServletRequest通常提供SlingBindings实例,其中包含对currentPage的引用,我正在使用静态字段WCMBindings.CURRENT\u PAGE在我的示例中,[依赖项:groupId:com.adobe.cq.sighly,artifactId:cq wcm sighly扩展,版本:1.2.30]

我在示例中使用的可选类是Java8类,它可以用来避免对空引用进行过多检查

final Optional<Page> optional = Optional.ofNullable(request)
        .map(req -> (SlingBindings) req.getAttribute(SlingBindings.class.getName()))
        .map(b -> (Page) b.get(WCMBindings.CURRENT_PAGE));
在你的吊带模型中,你只需要打电话

@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);
  }
}

Florian,你的意思是SlingHttpServletRequest吗?附加:我在公共Adobe Repos中找不到cq wcm sightly扩展,版本:1.2.30-因此我认为它不公开提供?是的,我做了-修复了它。cq wcm sightly扩展应该部署在AEM实例上,可能在不同的版本中。
@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);
  }
}