【问题标题】:How to iterate a map in JSP?如何在 JSP 中迭代地图?
【发布时间】:2015-05-31 18:08:49
【问题描述】:

如何使用<c:forEach> JSTL 标记在JSP 中使用<Integer, List<ResponseInfo>> 迭代映射,然后使用另一个for 循环迭代该列表?

如果您想查看代码,请告诉我。

从我返回的控制器
return new ModelAndView("reviewAudit","responseForm",responseForm);

其中 responseForm 包含地图:
private Map<String, List<ResponseInfo>> resInfoMap;


这是我的 JSP 代码:

<div class="panel-body">
    <div class="panel-group" id="accordion">
    <c:forEach items="${responseForm.resInfoMap}" var="responselist">

        <div class="panel panel-primary">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" class="">Topic1</a>
                </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse in" aria-expanded="true">
                <div class="panel-body">
                    <table>
                        <c:forEach items="${responselist}" var="response1">
                        <tr>
                            <td>
                                <p>
                                    <span style="font-size: 13px; font-weight: bold;">Q:</span>
                                    ${response1.auditQuestion}
                                </p>
                            </td>
                            <td>
                                <p>
                                    <span style="font-size: 13px; font-weight: bold;">Ans:</span>
                                    ${response1.auditResponse}
                                </p>
                                <p>
                                    <span style="font-size: 13px; font-weight: bold;">Comment:</span>
                                    ${response1.auditComment}
                                </p>
                            </td>
                        </tr>
                        </c:forEach><!-- list iteration -->
                    </table>
                </div>
                </div>
        </div>

    </c:forEach> <!-- map iteration -->         
    </div>       <!-- <div class="panel-group" id="accordion"> -->
</div>

【问题讨论】:

  • 我们会喜欢查看代码。
  • @kicko 在问题本身中添加了代码。附言迭代给出异常为javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &amp;lt;forEach&amp;gt;
  • 您从哪里获得响应列表?它是什么类型的?

标签: java jsp foreach jstl


【解决方案1】:

当使用&lt;c:forEach&gt; 遍历地图时,实际上是在遍历条目集合,这些条目同时具有“键”和“值”字段。

尝试以下方法:

<c:forEach var="entry" items="${map}">
   key is ${entry.key}
   <c:forEach var="info" items="${entry.value}">
        info is ${info}
   </c:forEach>
</c:forEach>

【讨论】:

  • 我必须写成“key is ${entry.key}”还是 var key=${entry.key}?
  • "key is ${entry.key}" 是显示如何访问密钥,如果您不想这样做,则不需要这样做。内部 c:forEach 将 entry.value(即 List)定义为“项目”,因此它会对其进行迭代。
  • 如何在每个循环中更改这一行 &lt;a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" class=""&gt;Topic1&lt;/a&gt; 以更改 href 和“主题 1 值”?
  • 我不确定您要做什么。我假设您想在内部 for 循环的每次迭代中更改此元素(即,在迭代 List 时),您应该做的第一件事是确保该元素在内部循环的范围内(否则您将无法在每次迭代时访问“信息”变量)。然后使用您对 ResponseInfo 类的理解从“info”变量中提取相关信息(我假设是 href 和 topic)。
  • &lt;a data-toggle="collapse" data-parent="#accordion" href="#collapseOne&lt;%System.out.print(var);%&gt;" aria-expanded="true" class=""&gt;Topic &lt;%System.out.print(count++); %&gt;&lt;/a&gt; 写了这个愚蠢的东西,其中 var 是 StringBuffer 并且 count 是 int 类型。但不是将该计数附加到“主题”并将 var 附加到 href 值,它出现在服务器日志中,有没有办法将 java 变量附加到 JSP 中的字符串?
【解决方案2】:

我们无法看到您的第一个代码。 试试这个:

<c:forEach var="map" items="${responseForm}"> <!--your map variable name-->
      <c:forEach var="list" items="${map.value}">

      </c:forEach>
</c:forEach>

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2020-06-23
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多