2017-05-09 103 views
0

有沒有辦法如何在HTL中使用相同的數據調用同一個模型實例? 我想在頁面模型中創建一個對象,讓我們假設一個String對象,然後在組件的模型中使用它。 創建bean(或模型實例),我稱之爲如何在AEM 6.2中的頁面和組件之間共享數據?

<sly data-sly-use.model="myModel"/> 

頁面和組件 問題是,我有2套本地數據的,現在2個實例 - 我不希望有。

回答

1

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); 
    } 
} 
+0

弗洛裏安,你的意思SlingHttpServletRequest? –

+0

附加說明:我無法在公共Adobe Repos中找到「cq-wcm-sightly-extension,version:1.2.30」 - 所以我認爲它不是公開可用的? –

+0

是的,我確實 - 修復了它。應在您的AEM實例上部署'cq-wcm-sightly-extension',可能採用不同的版本。 –