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',可能採用不同的版本。 –