我有一个令人费解的问题。我会尽力解释。我正在开发一个基于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)
})
是否存在的任何提示。
答案 0 :(得分:2)
您可以使用deprecated in ASP.NET方法验证节点是否存在。
if (session.nodeExists(currentNode.getPath + "/linkSet6")) {
...
}
会话对象通常通过ResourceResolver
对象获取:resolver.adaptTo(Session.class)
无论如何 - 我建议跳进Sling抽象层。在这种情况下,使用Resource
和ResourceResolver
会更方便(例如,getResource
会在资源不存在时返回null)。
答案 1 :(得分:1)
hasNode(“links”)将返回true