有没有办法可以使用相同的数据在 HTL 中调用模型的相同实例?我想在页面模型中创建一个对象,比如说一个字符串对象,然后在组件模型中使用它。要创建 bean(或模型实例),我调用
<sly data-sly-use.model="myModel"/>
在页面和组件中问题是我现在有 2 个实例和 2 组本地数据 - 我不想拥有。
有没有办法可以使用相同的数据在 HTL 中调用模型的相同实例?我想在页面模型中创建一个对象,比如说一个字符串对象,然后在组件模型中使用它。要创建 bean(或模型实例),我调用
<sly data-sly-use.model="myModel"/>
在页面和组件中问题是我现在有 2 个实例和 2 组本地数据 - 我不想拥有。
(SlingHttpServletRequest
通常)提供了 的实例SlingBindings
,其中包含对"currentPage"
(我在示例中使用静态字段WCMBindings.CURRENT_PAGE
[dependency: groupId: com.adobe.cq.sightly
, artifactId: cq-wcm-sightly-extension
, version: 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);
}
}