0
有没有办法如何在HTL中使用相同的数据调用同一个模型实例? 我想在页面模型中创建一个对象,让我们假设一个String对象,然后在组件的模型中使用它。 创建bean(或模型实例),我称之为如何在AEM 6.2中的页面和组件之间共享数据?
<sly data-sly-use.model="myModel"/>
页面和组件 问题是,我有2套本地数据的,现在2个实例 - 我不希望有。
有没有办法如何在HTL中使用相同的数据调用同一个模型实例? 我想在页面模型中创建一个对象,让我们假设一个String对象,然后在组件的模型中使用它。 创建bean(或模型实例),我称之为如何在AEM 6.2中的页面和组件之间共享数据?
<sly data-sly-use.model="myModel"/>
页面和组件 问题是,我有2套本地数据的,现在2个实例 - 我不希望有。
的SlingHttpServletRequest
(一般)提供的SlingBindings
一个实例,其中包含至"currentPage"
基准(我使用的静态字段WCMBindings.CURRENT_PAGE
[依赖性:的groupId:com.adobe.cq.sightly
,的artifactId:cq-wcm-sightly-extension
,版本: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);
}
在你的吊带模型,你只需调用
@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? –
附加说明:我无法在公共Adobe Repos中找到“cq-wcm-sightly-extension,version:1.2.30” - 所以我认为它不是公开可用的? –
是的,我确实 - 修复了它。应在您的AEM实例上部署'cq-wcm-sightly-extension',可能采用不同的版本。 –