如何使用 JSTL forEach 循环检索 HashMap [重复]

Posted

技术标签:

【中文标题】如何使用 JSTL forEach 循环检索 HashMap [重复]【英文标题】:How to retrieve HashMap using JSTL forEach loop [duplicate] 【发布时间】:2014-08-25 12:38:36 【问题描述】:

我有一些数据要从具有地图的 ModelandView 类发送。我映射数据并将其发送到我的 jsp 页面。但无法使用 jstl 标签检索数据。控制器正在将数据发送到指定的 jsp,但由于使用了 jstl 标记,因此未显示在指定的字段中。如果有人发现错误,那就太好了。

Controller.java

    public ModelandView getData(@Context HttpServletRequest request) 
          Map<String,String> map=new HashMap<String,String>();
            ModelandView responseView = new ModelandView("trackData",map);
            //some code here
            if (somecondition) 
                map.put("data",detailsVO.getVehicleId());
                responseView.addAllObjects(map);
            
            else 
                System.out.println("Not present");
            
            return responseView;
        

trackData.jsp

<select class="testdata" id="listvehicle">
<c:forEach var="sample" items="$data">
<option> $sample</option>
</c:forEach>
</select>

jsp 页面未在下拉列表中显示任何值。

【问题讨论】:

【参考方案1】:

尝试访问键和值。当您说$sample 时,它指的是地图的条目集。因此,您需要从条目中提取键和值。此外,您没有设置变量,而是在 for 循环中尝试访问变量名称 map。也改变它ModelandView responseView = new ModelandView("trackData", "data", map); 并尝试下面的代码。

<select class="testdata" id="listvehicle">
    <c:forEach var="sample" items="$data">
        <option value="$sample.key"> $sample.value</option>
    </c:forEach>
</select>

【讨论】:

我尝试了键和值。先生仍然没有任何结果 检查该变量名。它应该是 items="$trackData" 而不是 items="$map" 它的变量命名。创建类似ModelandView responseView = new ModelandView("trackData", "data", map); 的模型并尝试上面的代码。第一个参数指定视图名称。第二个属性名称和第三个属性值。那应该可以解决它..【参考方案2】:

你可以这样试试

<c:forEach var="sampleMap" items="$data">
Name:  $sampleMap.key <br/>
Value: $sampleMap.value <br/>
</c:forEach>

【讨论】:

请向问题作者解释为什么这会起作用。这无助于向他们展示他们的原始代码出了什么问题。在您的代码示例中添加说明。【参考方案3】:

你可以在你的jsp中使用scriptlet:

<%@ page import ="java.util.*"%>
<% Map myMap = (Map) request.getAttribute("trackData"); %>

<select class="testdata" id="listvehicle">
<c:forEach var="entry" items="$myMap">
  <option value="$entry.key"> $entry.value</option>
</c:forEach>
</select>

【讨论】:

如果我使用 scriplet,它会通过请求属性在控制台上正确地为我提供输出,但它不会更新 jsp 页面中的下拉列表 编辑答案以填充选择框而不是输出到页面 您需要在 jsp 中导入所需的类。尝试在 jsp 顶部添加

以上是关于如何使用 JSTL forEach 循环检索 HashMap [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSTL forEach 循环的 varStatus 作为 ID

jstl foreach标签

jstl表达式的foreach标签只执行循环不显示取出的值

JSTL--JSTL表达式:c:forEach,varstatus/begin end/循环控制标签--drp215

JSTL自定义标签 实现forEach循环支持集合.数组

JSTL标签之c:foreach,c:if标签小结