2017-05-09 105 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',可能采用不同的版本。 –