2

我是 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"/>

这是正确的方法还是有办法适应resourceans 仍然能够注入request

4

2 回答 2

3

您不能这样做,因为资源不支持 SlingHttpServletRequest。如果您的模型中需要 Request,请使其适应 Request。

有一些图书馆允许这样做。它使用过滤器将当前请求存储在 ThreadLocal 中,然后从中读取,但我不推荐这种方法。ThreadLocal 只是另一个全局变量。

于 2016-12-02T09:17:21.827 回答
1
@Model(adaptables =  { SlingHttpServletRequest.class, Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class ImageModel {
    @Self 
    private Resource resource;

    @SlingObject
    private ResourceResolver resourceResolver;

    @SlingObject
    SlingHttpServletRequest slingRequest;
}
于 2017-11-21T12:05:30.260 回答