有没有办法可以使用相同的数据在HTL中调用相同的模型实例? 我想在页面模型中创建一个对象,让我们说一个String对象,然后在组件模型中使用它。 要创建bean(或模型实例),我调用
<sly data-sly-use.model="myModel"/>
在页面和组件中 问题是我现在有2个实例,有2组本地数据 - 我不想要的。
答案 0 :(得分:1)
SlingHttpServletRequest
(通常)提供SlingBindings
的实例,其中包含对"currentPage"
的引用(我使用静态字段WCMBindings.CURRENT_PAGE
[dependency: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);
}
在你的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);
}
}