在循环JSTL中动态创建变量

时间:2014-05-20 02:48:51

标签: java jsp jstl

我正在从一个带有一些数组的servlet请求中检索一个HashMap,它们的名称是Items1,Items2,ItemsN。我永远不会完全知道HashMap的大小,所以我想用<c:set/>标签创建迭代<c:forEach/>循环的变量,因为我不想像这样手动创建它们:

<c:set var="listItems1" value="${Map['Items1']}" scope="session"/>
<c:set var="listItems2" value="${Map['Items2']}" scope="session"/>
<c:set var="listItems3" value="${Map['Items3']}" scope="session"/>
<c:set var="listItems4" value="${Map['Items4']}" scope="session"/>
<c:set var="listItems5" value="${Map['Items5']}" scope="session"/>

而不是我想以这种方式创建它们:

<c:forEach items="${Map['Items']}" var="Items" varStatus="i">
     <c:set var="${listItems + i.index}" value="${Items}"/>
</c:forEach>

但我不能,因为JSTL告诉我

  

根据标记文件中的TLD或属性指令,属性var不接受任何表达式

然后,我想知道是否有可能在JSTL中动态创建变量,或者我必须手动创建它们

1 个答案:

答案 0 :(得分:0)

  

我永远不会完全了解HashMap的大小。

您可以使用jstl函数长度来获取hashmap的长度:

    Length of Map : ${fn:length(yourMap)}

确保在jsp中包含它:&lt;%@ taglib prefix =&#34; fn&#34; URI =&#34; HTTP://java.sun.com/jsp/jstl/functions"%&GT;

如果您需要根据hashmap的大小进行迭代并执行某些操作,可以尝试:

    <c:forEach var="i" begin="1" end="${yourMap.size()}">
       //do something
    </c:forEach>