2016-02-27 26 views
1

我正在讀java中的一組節點。每個節點都是一個國家的。每個節點都有屬性「國家」,像美國這樣的國家也有「國家」屬性節點。這種「狀態」是萬事的一部分,因此每個項目都有一個狀態,這是一起在一個節點是這樣的:AEM:從一個多字段值的java節點讀取一個值

country = "US" 
, states = [{"statename":"District of Columbia"}, {"statename":"Rhode Island"},{"statename":"South Dakota"}] 

我想填充他們通過一個servlet調用這樣的頁面JSON :

http://localhost:4502/bin/utilservlet.json

{ 
    country: "India" 
    { 
     statename:"Delhi", 
     statename:"Punjab", 
     statename:"Haryana" 
    } 
} 

{ 
    country: "Turkey" 
} 

下面是我的代碼:

while (nodeItr.hasNext()) { 
        Node cNode = nodeItr.nextNode(); 
        if (cNode.hasProperty("country")) { 
         JSONObject jsonData = new JSONObject(); 
         jsonData.put("country", childNode.getProperty("countryname").getValue().getString()); 
         jsonArray.put(jsonData); 
         if (cNode.hasProperty("states")) { 
// This should display array of all states as an when it is encountered. 
LOG.info(childNode.getProperty("states").getValue().getString()); 

以下情況發生: 1.除了州屬性出口的第一個國家外,我獲得了所有國家/地區列表。 2.沒有其他國家在那裏顯示狀態列表。

我在做什麼錯?

+0

爲節點自定義類,如果有,請提供它的代碼。 – Anil

+0

節點是javax.jcr.Node類; – Ajax

+0

所以我試圖理解,你是否能夠通過節點(我的意思是所有國家和它們的相應狀態)讀取所有數據,並且無法將其寫入JSON格式。或者你甚至無法讀取它? – Anil

回答

0

嘗試以下操作:

if (cNode.hasProperty("states")) { 
    Property statesProperty = cNode.getProperty("states"); 
    if (statesProperty.isMultiple()) { 
     Value[] statesValues = states.getValues(); 
     for (Value stateValue : stateValues) { 
      LOG.info(stateValue.getString()); 
     } 
    } 
} 
+0

謝謝,它解決了這個問題。 – Ajax

+0

你也可以請回答這一個:http://stackoverflow.com/questions/35685126/aem-getting-states-matching-country-from-another-node – Ajax

+0

我想提醒人們,使用org.apache.sling .api.resource.Resource,org.apache.sling.api.resource.ValueMap接口而不是低級別的javax.jcr.Node,javax.jcr.Property。它們更易於使用,不會拋出異常,並導致更簡單,更易維護的代碼。 –