【问题标题】:How to retrieve HashMap using JSTL forEach loop [duplicate]如何使用 JSTL forEach 循环检索 HashMap [重复]
【发布时间】: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 页面未在下拉列表中显示任何值。

【问题讨论】:

    标签: java jsp spring-mvc jstl


    【解决方案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 顶部添加
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2013-09-20
    • 2012-05-28
    相关资源
    最近更新 更多