2013-05-10 52 views
0

我對Java很新,所以請耐心等待。我有一小段代碼 檢查currentNode是否具有「fileReference」屬性並返回其值。 除了它看起來不像我的空檢查正在工作,因爲如果fileReference 中沒有任何內容,我會收到錯誤消息。如果存在對fileReference的引用,它可以正常工作。以下是錯誤:Java - 在currentNode上進行空值檢查

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

你在哪裏調用'getImageNode()'?我猜你正在建立一個無效的路徑,通過將null轉換爲空字符串。 – 2013-05-10 22:10:41

+0

getImageNode只是一個getter我打電話不知道你的意思是將null轉換爲空字符串。 – 2013-05-11 02:45:55

回答

1

我很自信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(); 
     } 
    } 
} 

我假設你應對可能出現的異常倉庫其他地方

+0

哇!謝謝@ 3xil3像魅力一樣工作。你的正確的fileReference實際上是一個屬性。謝謝您的幫助! – 2013-05-11 17:08:15

+0

@DelmonYoung很高興能幫到 – 3xil3 2013-05-11 19:26:24

+0

這的確是對的,Delmon缺少的東西在JCR javadocs中找到,網址是http://www.day.com/maven/jsr170/javadocs/jcr-2.0/javax/jcr/Node.html #getProperty(java.lang.String):如果在指定路徑中不存在屬性,或者當前Session沒有對指定屬性的讀訪問權限,getProperty將引發PathNotFoundException。因此,您需要事先檢查該財產是否存在。 – 2013-05-15 09:46:25

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 
     } 
    } 
} 

您檢索所有節點與getProperties(String),如果沒有發現任何節點和空Iterator檢索。

該行Node fileReference...我剛猜到這種類型(Node),你必須改變它。

+0

感謝您回覆@ssedano你的權利fileReference是一個節點。但出於某種原因,我仍然遇到同樣的錯誤,這對我來說沒有任何意義,爲什麼這樣做不起作用。 – 2013-05-11 02:44:01