2

我正在发送带有模型的自定义对象列表,以及作为视图的 JSP。我的自定义对象有一个名为的属性properties,它是JSONObject. 该属性的值为

{"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?请帮忙

4

2 回答 2

7

我有这样的东西

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

替换${jsonArray.length() -1}为您的jsonArray. 在这种情况下,它是这样的

${customObject.services.getJSONArray(\"services\").length()}
于 2016-01-16T15:37:47.413 回答
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。

更详细的解释

于 2013-01-22T09:52:31.163 回答