【问题标题】:SlingModels: Can I inject the SlingHttpServletRequest when adapting from Resource?SlingModels:从 Resource 适应时可以注入 SlingHttpServletRequest 吗?
【发布时间】:2017-04-15 23:37:21
【问题描述】:

我是 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 并且仍然能够注入request

【问题讨论】:

    标签: aem sling-models


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      @Model(adaptables =  { SlingHttpServletRequest.class, Resource.class }, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
      public class ImageModel {
          @Self 
          private Resource resource;
      
          @SlingObject
          private ResourceResolver resourceResolver;
      
          @SlingObject
          SlingHttpServletRequest slingRequest;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 1970-01-01
        • 2011-06-10
        • 2020-10-23
        • 2011-12-30
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多