【问题标题】:Resource Resolver returned as null via sling models资源解析器通过吊索模型返回为 null
【发布时间】:2015-08-26 09:54:39
【问题描述】:

在通过 sling 模型注入时,Resource Resolver 返回为 null,如果有任何遗漏,请告诉我:

我试过了:

@Model(adaptables = Resource.class)
public class Navigation {

   @Inject  @Source("sling-object")
   private ResourceResolver resourceResolver;

}

我也试过了:

@Model(adaptables = Resource.class)
public class Navigation {

  @Inject
  private ResourceResolver resourceResolver;

}

在这两种情况下,它都被返回为 null 并引发空指针异常。

让我知道我可能缺少什么来纠正这个错误。

【问题讨论】:

    标签: java aem sling sling-models


    【解决方案1】:

    在将资源调整为模型之前检查您是否调用了<cq:defineObjects /><cq:defineObjects /> 应该在您的 global.jsp 文件中,该文件应该包含在每个组件的开头)

    【讨论】:

    • 它作为复制的库 global.jsp 包含在我的个人 global.jsp 中,并且带有普通注射器的吊索模型工作正常。在我的情况下,只有 ResourceResolver 返回 null。
    • 尝试在<cq:defineObjects /> 旁边明确添加<sling:defineObjects/>。理论上 <cq:defineObjects /> 应该提供来自 <sling:defineObjects/> 的对象,但 imo 值得一试。可能它不起作用,因为您更改了sling taglib 定义 uri
    • 补充说同样的问题仍然存在,如果你可以建议或提供意见,任何替代方案
    • 我最后的想法是检查<cq:defineObjects />标签产生的内容,为此您安装AEM Dash包,它可以反编译AEM类安装它,打开/etc/dash.html页面并反编译` com.day.cq.wcm.tags.DefineObjectsTag`(查看<cq:defineObjects /> 标签的工作原理)请记住,此类应扩展org.apache.sling.scripting.jsp.taglib.DefineObjectsTag 类,因此请检查这两个类产生的内容(第二个类应产生resourceResolver对象)
    • @user3837000 请发布一个回答,描述您所做的事情。如果其他人有同样的问题,它会比这些 cmets 更容易找到。
    【解决方案2】:

    这适用于我使用 @SlingObject 注释,而不是 @Inject@Source。从理论上讲,他们应该做同样的事情,但我想我会添加这个答案,以防万一它对其他人也有帮助。

    @Model(adaptables = Resource.class)
    public class Navigation {
    
      @SlingObject
      private ResourceResolver resourceResolver;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2014-07-24
      • 2016-11-14
      • 2021-09-09
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      相关资源
      最近更新 更多