Java - 对currentNode进行Null检查

时间:2013-05-10 22:08:16

标签: java jcr sling

我对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 ""; }

非常感谢任何帮助!

2 个答案:

答案 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