我是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})
现在适用于reuqest
和resource
JSP代码:
<sling:adaptTo adaptable="${slingRequest}" adaptTo="models.ImageModel" var="m"/>
这是正确的方法吗?还是有办法适应resource
ans仍然能够注入request
?
答案 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;
}