2017-05-09 5 views
0

HTL 내에서 동일한 데이터를 사용하여 모델의 동일한 인스턴스를 호출하는 방법이 있습니까? 페이지 모델 내에서 개체를 만들고, String 개체를 말한 다음 구성 요소 모델에서 사용하려고합니다. 내가 갖고 싶어하지 않는 것 - 는 빈 (모델 예) I 페이지에AEM 6.2에서 페이지와 구성 요소간에 데이터를 공유하는 방법은 무엇입니까?

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

호출하고 구성 요소에 문제는 내가 로컬 데이터의 2 개 세트와 지금이 개 인스턴스를 가지고있다을 만들려면 .

답변

1

SlingHttpServletRequest (일반) "currentPage" 참조 포함 SlingBindings의 인스턴스를 제공한다 (I 정적 필드를 WCMBindings.CURRENT_PAGE 사용하고 [:의 groupId : com.adobe.cq.sightly, artifactId를 : cq-wcm-sightly-extension 버전 : 종속성 1.2.30] 제 실시 예에서).

Optional 내 예제에서는 null 참조에 대한 검사를 너무 많이하지 않도록 Java 8 클래스를 사용하고 있습니다.

final Optional<Page> optional = Optional.ofNullable(request) 
     .map(req -> (SlingBindings) req.getAttribute(SlingBindings.class.getName())) 
     .map(b -> (Page) b.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

플로리안를 부를 것이다 당신의 슬링 모델에서

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을 의미합니까? –

+0

추가 : 공개 Adobe Repos에서 "cq-wcm-sightly-extension, version : 1.2.30"을 찾을 수 없습니다. 공개적으로 사용 가능하지 않다고 생각합니까? –

+0

예, 제가 그랬습니다. 'cq-wcm-sightly-extension'을 다른 버전의 AEM 인스턴스에 배포해야합니다. –