2013-01-22 275 views
0

我使用model發送自定義對象的列表,並將JSP作爲視圖發送。我的自定義對象有一個名爲properties的屬性,它是JSONObject。此屬性的值將作爲使用JSTL在JSP中迭代JSONArray

{"services":[{"name":"abcd"},{"name":"efgh"}]} 

現在我想通過JSONArray [{"name":"abcd"},{"name":"efgh"}]進行迭代。這是我正在做什麼來循環通過

<c:if test="${not empty customObject.services}"> 
       <c:forEach items="${customObject.services.getJSONArray(\"services\")}" var="Service" varStatus="rowCounterCh"> 
        <li>${Service.name}</li> 
        </c:forEach> 
</c:if> 

但是,這是無法迭代通過JSONArray。我正在跟隨錯誤。

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; 

那麼,我應該怎麼做迭代通過JSONArray?請幫助

+0

你使用了什麼具體的JSONArray實現? – Taky

+0

@Taky對不起,我不明白那部分:( –

+0

在Java中存在很多JSON庫。你用什麼?什麼包是用於喜悅的JSONArray類? – Taky

回答

2

對於每個標籤都需要您的物品的基礎接口。 JSONArray既不是java.util.Collection也不是java.util.Iterable。所以對於每個標籤實現都不能遍歷你傳遞給items屬性的集合。

爲了解決這個問題,您可以:

  1. 生成與JSP HTML列表視圖。
  2. 或列表項將JSONArray轉換爲customObject.services.getJSONArray方法中的某個相應集合。 gson實現中的JSONArray應該有方法:iterator,因爲它實現了Iterable接口。嘗試在#getJSONArray(String)方法中返回com.google.gson.JSONArray#iterator()而不是JSONArray。

more detailed explanation

+0

我以爲得到JSONarray和在內部scriptlet中工作,因爲'var itemStr ='';'但是這給了我json數組[ {"名":" ABCD "},{"名":" EFGH "}?]這是所有「S與"代替我怎樣才能避免這種 –

+1

嘗試設置將escapeXml屬性設置爲false:HTTP:// WWW .tutorialspoint.com/JSP/jstl_core_out_tag.htm – Taky

5

我有這樣的事情

<c:forEach begin="0" end="${jsonArray.length() -1}" var="index"> 
    ${jsonArray.getJSONObject(index).getString("name")} 
</c:forEach> 

jsonArray替換${jsonArray.length() -1}。在這種情況下,它是這樣的

${customObject.services.getJSONArray(\"services\").length()}