【问题标题】:currentNode object gives NullPointerExceptioncurrentNode 对象给出 NullPointerException
【发布时间】:2013-09-17 12:41:28
【问题描述】:

在我的组件的 JSP 中,如果我想使用 currentNode 对象引用当前节点,它会抛出一个 NullPointerException,然后整个组件会抛出一个 ScriptEvaluationException

我的组件 JSP 确实在顶部包含 global.jsp。我猜 currentNode 对象是由 global.jsp 创建的

奇怪的是,该组件仅在特定站点中引发这些异常。它在其他人身上运行良好。

这可能是什么原因? currentNode对象在什么情况下为NULL?

【问题讨论】:

  • 上下文是什么?你想从哪里得到什么样的节点?
  • 我的页面模板中添加了一个自定义搜索组件。在那里,我需要使用“currentNode.getSession().getWorkspace().getQueryManager().createQuery()”获取 Query 对象,但 currentNode 为空。

标签: aem sling


【解决方案1】:

也许您的组件是synthetic resource?如果你有这样的包含标签:

<cq:include path="mynode" resourceType="myapp/components/somecomponent" />

并且mynode 不存在,包含的组件是渲染器,但是您不能在somecomponent 代码中引用节点属性。

在这种情况下,resource 变量将是 SyntheticResourcecurrentNode 将是 null

更新:

如果您并不真的需要 currentNode 而是 QueryManager 对象(正如您的评论所说),您可以使用 resourceResolver 对象来获取它:

resourceResolver.adaptTo(Session.class).getWorkspace().getQueryManager()

【讨论】:

  • 我使用了 。但我不明白 - “而且 mynode 不存在”。 AFAIK,当我们使用 添加组件时,无论如何都会创建“路径”变量(mynode)。不是这样吗?
  • &lt;cq:include&gt; 不会创建任何新节点。自己检查一下;)
  • 我已经更新了我的答案,提示在不使用 curretNode 对象的情况下获取 QueryManager 对象。
【解决方案2】:

我想补充一点,只有在拖放后包含组件后才会创建节点。因此,如果不是这种情况,您将不会在 /content/your-site/ 中拥有您的节点

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多