2016-12-01 4 views
1

저는 SlingModels을 처음 접했고 주석은 아직 명확하지 않습니다. 현재 AEM 6.2에서 SlingModels을 대신 사용하여 기본 기초 구성 요소를 변환하려고합니다.SlingModels : Resource에서 적응할 때 SlingHttpServletRequest를 삽입 할 수 있습니까?

이미지 구성 요소의 경우 Foundation JSP에서 SlingHttpServletRequest를 사용하여 ImageDoctype을 설정합니다.

@Model(adaptables = {Resource.class}) 
public class ImageModel { 
    @SlingObject 
    private SlingHttpServletRequest request; 

    @SlingObject 
    private Resource resource; 
} 

그러나 이것을 request

가 null : 그래서 나는 다음 시도했다. reuqestresource

JSP 코드 지금 작동

@Model(adaptables = {SlingHttpServletRequest.class}) 

:

<sling:adaptTo adaptable="${slingRequest}" adaptTo="models.ImageModel" var="m"/> 

그것을 할이 올바른 방법인가, 아니면에서 적응하는 방법이 그래서 사용으로 전환 resource은 여전히 ​​request을 삽입 할 수 있습니까?

답변

3

리소스가 SlingHttpServletRequest를 인식하지 못하기 때문에 그렇게 할 수 없습니다. 모델에서 Request가 필요한 경우 요청에서 적응 가능하도록 설정하십시오.

그렇게 할 수있는 라이브러리가있었습니다. 그것은 Filter를 사용하여 현재의 Request를 ThreadLocal에 저장 한 다음 그것을 읽었지 만,이 방법은 권장하지 않습니다. ThreadLocal은 또 하나의 전역입니다.

0
@Model(adaptables = { SlingHttpServletRequest.class, Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL) 
public class ImageModel { 
    @Self 
    private Resource resource; 

    @SlingObject 
    private ResourceResolver resourceResolver; 

    @SlingObject 
    SlingHttpServletRequest slingRequest; 
}