在getNode方法

时间:2016-09-20 17:56:06

标签: java jsp cq5 jcr

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

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

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

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

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

我遇到的问题是linkSet6始终存在,但它可能包含links,也可能没有if(currentNode != null && currentNode.hasNode("linkSet6")) { baseNode = currentNode.getNode("linkSet6").getNode("links"); list6 = Utilities.parseStructuredMultifield(baseNode); } 。我这样做,只要有&#34;链接&#34;

,它就可以正常工作
baseNode = currentNode.getNode("linkSet6").getNode("links");

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

  

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

第41行是这样的:

links

我已经尝试过尺寸(),长度()等来检查但无济于事。在执行getNode("links")之前,有关如何检查var data = [{"5+":2},{"3-5":0},{"1-3":1},{"0.5":0},{"<30":0},{"5+":1},{"3-5":1},{"1-3":0},{"0.5":0},{"<30":0},{"5+":3},{"3-5":0},{"1-3":3},{"0.5":0},{"<30":0}]; var groupArr = []; ##loop through the data## data.forEach(function(item){ ##find the keys ## var keys = Object.keys(item); var obj = {}; obj[keys] = []; ##push the data to object keys array## obj[keys].push(item[keys]) groupArr.push(obj) }) 是否存在的任何提示。

2 个答案:

答案 0 :(得分:2)

您可以使用deprecated in ASP.NET方法验证节点是否存在。

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

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

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

答案 1 :(得分:1)

如果节点链接存在,

hasNode(“links”)将返回true