【问题标题】:Check if linklist is not empty before getNode method在 getNode 方法之前检查链接列表是否不为空
【发布时间】:2016-09-20 17:56:06
【问题描述】:

我有一个令人费解的问题。我会尽力解释。我正在开发基于 JCR 和 Java 的 Adob​​e CQ 代码库。

我有一个这样的 Java ArrayList 声明:

ArrayList<Map<String,Property>> list6 = new ArrayList<Map<String,Property>>();

此外,我在代码的其他地方有一个由 CQ/Java 代码定义的链表。该链表称为linkSet6。列表中的每个“节点”的名称为 links

我正在尝试将内容从 linkSet6 获取到 ArrayList list6

我面临的问题是linkSet6 始终存在,但其中可能有也可能没有links。我正在这样做,只要有“链接”,它就可以正常工作

if(currentNode != null && currentNode.hasNode("linkSet6")) {
   baseNode = currentNode.getNode("linkSet6").getNode("links");
   list6 = Utilities.parseStructuredMultifield(baseNode);
}

但是当linkSet6 为空时我得到这个错误:

org.apache.sling.api.scripting.ScriptEvaluationException:在第 41 行处理 JSP 页面 /apps/citrixosd-responsive/components/content/footerNavigation/footerNavigation.jsp 时发生异常

第 41 行是这样的:

baseNode = currentNode.getNode("linkSet6").getNode("links");

我试过 size(),length() 等检查但无济于事。在执行getNode("links") 之前如何检查links 是否存在的任何提示。

【问题讨论】:

  • 可能晚了,但我们从 Node & Property 转向 Resource & ValueMap 以简化代码 - 特别是在 JSP 中(不应该构建数据对象,例如地图列表)。有关简化代码的不同 API 的更多示例,请参阅 itgumby.github.io/blog/2016/better-aem-jsp-objects.html

标签: java jsp aem jcr


【解决方案1】:

您可以使用Session.nodeExists(String)方法验证节点是否存在。

if (session.nodeExists(currentNode.getPath + "/linkSet6")) {
    ...
}

会话对象通常通过ResourceResolver对象获取:resolver.adaptTo(Session.class)

无论如何 - 我建议跳入 Sling 抽象层。在这种情况下,使用 ResourceResourceResolver 会更方便一些(例如,当资源不存在时,getResource 将返回 null)。

【讨论】:

    【解决方案2】:

    如果节点链接存在,hasNode("links") 将返回 true

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多