JSTL在地图上的迭代失败

时间:2014-11-26 21:19:58

标签: jstl

为什么以下代码因属性'值'而失败?在类型java.lang.String上找不到

   <c:set var="map" scope="request">
        <%= new HashMap<String, String>() {{ 
            put("key1", "value1");
            put("key2", "value2");
            put("key3", "value3");
            put("key4", "value4");
            put("key5", "value5");
            put("key6", "value6");
        }} %>
    </c:set>

    <c:forEach var="item" items="${map}">
        ${item.value} <br/>
    </c:forEach>

然而,如果servlet设置map属性然后转发到JSP !!!

,它会成功

2 个答案:

答案 0 :(得分:0)

使用以下代码

   <%=
    HashMap hashMap=     new HashMap<String, String>() {{ 
            put("key1", "value1");
            put("key2", "value2");
            put("key3", "value3");
            put("key4", "value4");
            put("key5", "value5");
            put("key6", "value6");
        }} 
    request.setAttribute("map", hashMap);
     %>


    <c:forEach var="item" items="${map}">
        ${item.value} <br/>
    </c:forEach>

您正在将scriptlet与jstl类型的编码混合在一起,它被认为是错误的代码实践,请参阅link1link2

另外,请参阅以下内容以了解jsp variable scope

答案 1 :(得分:0)

似乎如果值在<c:set>正文中,则字符串值将分配给变量。 Code bellow就像一个魅力!

<c:set var="map" scope="request" value="<%= new HashMap<String, String>() {{ put(\"key1\", \"value1\"); put(\"key2\", \"value2\"); put(\"key3\", \"value3\"); put(\"key4\", \"value4\"); put(\"key5\", \"value5\"); put(\"key6\", \"value6\"); }} %>" />

<c:forEach var="item" items="${map}">
    ${item.key} <br/>
</c:forEach>