Java 在循环JSTL中动态创建变量

Java 在循环JSTL中动态创建变量,java,jsp,jstl,Java,Jsp,Jstl,我正在使用一些数组从servlet请求中检索HashMap,它们的名称是Items1、Items2、ItemsN。我永远不知道HashMap的确切大小,所以我想创建带有标记的变量来迭代循环,因为我不想像这样手动创建它们: <c:set var="listItems1" value="${Map['Items1']}" scope="session"/> <c:set var="listItems2" value="${Map['Items2']}" scope="session

我正在使用一些数组从servlet请求中检索HashMap,它们的名称是Items1、Items2、ItemsN。我永远不知道HashMap的确切大小,所以我想创建带有
标记的变量来迭代
循环,因为我不想像这样手动创建它们:

<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或attribute指令,attribute var不接受任何表达式

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

我永远也不知道HashMap的确切大小

您可以使用jstl函数length获得hashmap的长度,如下所示:

    Length of Map : ${fn:length(yourMap)}
请确保在jsp中包含以下内容:

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

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

//做点什么

了解
forEach的用途
它迭代对象集合。为什么要从循环中创建变量?它们的用途是什么?感谢您的提问,上面我手动创建了5个变量,因为我假设${Map['Items']}的大小永远不会超过5个项目,在大多数情况下,这些变量中的一些将是空的,因为大小小于5个项目,但是如果${Map['Items']}超过5个项目,我将不得不手动添加更多变量,然后我想避免动态创建它们。如果有更好的解决方案……它可能很有用,但对于这个问题,这个循环与我在问题中使用的相同。感谢您的回答,它是有效的,但问题不是如何迭代HashMap,问题是在“var”中动态创建变量当我在HashMap中迭代时,标记的一个动态值。@user2573318在c集中不能有var-literal的动态值。