我对Java很陌生,所以请耐心等待。我有一小段代码 检查currentNode是否具有“fileReference”属性并返回其值。 除非它看起来像我的空检查不起作用,因为如果fileReference中没有任何内容 我收到一个错误。如果存在对fileReference的引用,则可以正常工作。这是错误:
Caused by: javax.jcr.PathNotFoundException: fileReference
这是我的代码:
if(currentNode != null){
NodeIterator checkNode = currentNode.getNodes();
while (checkNode.hasNext()) {
Node imageNode = checkNode.nextNode();
printNodeTitle = imageNode.getProperty("fileReference").getString();
}
}
public String getImageNode() { (printNodeTitle != null) ? return printNodeTitle : return ""; }
非常感谢任何帮助!
答案 0 :(得分:2)
我非常有信心fileReference实际上是一个属性,而不是一个单独的节点(因为你正在调用属性)。既然您知道要获取的属性的名称,我建议您直接使用它来检查它是否存在。
if(currentNode != null){
NodeIterator checkNode = currentNode.getNodes();
while (checkNode.hasNext()) {
Node imageNode = checkNode.nextNode();
if(imageNode.hasProperty("fileReference")){
Property fileReferenceProp = imageNode.getProperty("fileReference");
printNodeTitle = fileReferenceProp.getString();
}
}
}
我假设您在其他地方处理可能的存储库异常
答案 1 :(得分:1)
我不是sling
的专家,但试试这个
if(currentNode != null){
NodeIterator checkNode = currentNode.getNodes();
while (checkNode.hasNext()) {
Node imageNode = checkNode.nextNode();
Iterator<Node> fileReferences = imageNode.getProperties("fileReference");
if(fileReferences.hasNext()) { // You might want to improve this
printNodeTitle = fileReference.next().getString(); // You might want to improve it
}
}
}
如果未找到任何节点且检索到空Iterator
,则使用getProperties(String)检索所有节点。
我想知道你必须更改类型(Node fileReference...
)的行Node
。