SlingModels:我可以在从资源调整时注入SlingHttpServletRequest吗?

时间:2016-12-01 10:57:35

标签: aem sling-models

我是SlingModels的新手,注释还不是很清楚。我目前正在尝试将一些基本的基础组件从AEM 6.2转换为使用SlingModels。

对于图像组件,基础JSP使用SlingHttpServletRequest来设置ImageDoctype。所以我尝试了以下内容:

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

    @SlingObject
    private Resource resource;
}

但是这样request为空。所以我转而使用:

@Model(adaptables = {SlingHttpServletRequest.class})

现在适用于reuqestresource

JSP代码:

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

这是正确的方法吗?还是有办法适应resource ans仍然能够注入request

2 个答案:

答案 0 :(得分:3)

你不能这样做,因为资源不是SlingHttpServletRequest意识到的。如果您的模型中需要请求,请根据请求进行调整。

有一些图书馆允许这样做。它使用Filter在ThreadLocal中存储当前的Request,然后从中读取它,但我不推荐这种方法。 ThreadLocal只是另一个全球性的。

答案 1 :(得分:1)

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

    @SlingObject
    private ResourceResolver resourceResolver;

    @SlingObject
    SlingHttpServletRequest slingRequest;
}