我在 Controller 中有一个HashMap
:
HashMap<String, ArrayList<String> map = new HashMap<String, ArrayList<String>();
在 JSP 页面中,我想通过这样的方式访问它:
<c:forEach var="list" items="${requestScope.list}">
<c:set var="testing" value="{requestScope.map}"></c:set>
<c:forEach var="anotherTesting" items="${testing['${list.item}']}">
<option><c:out value="${anotherTesting}"/></option>
</c:forEach>
</c:forEach>
其中 list.item
是一个字符串,但它用于另一个进程,但我希望它用于访问 HashMap
。
有没有办法连接 JSTL? map.key
或 map['key']
都可以。
最佳答案
我想这很简单:
<c:forEach var="anotherTesting" items="${testing[list.item]}">
<option><c:out value="${anotherTesting}"/></option>
</c:forEach>
注意带引号和不带引号的区别:
-
${testing[list.item]}
相当于testing.get(list.getItem());
-
${testing['list.item']}
相当于testing.get("list.item");
.
注意事项:
访问属性不需要指定作用域,除非不同作用域的同名冲突。所以,
"${requestScope.list}"
可以改成${list}
, 和"${requestScope.map}"
可以改成${map}
.请为
var
使用不同的名称外循环的属性。可能是listItem
而不是list
.无需设置
map
到不同的变量。那<c:set...>
不需要。您可以直接访问map
的属性属性。
因此,您的循环可以修改为:
<c:forEach var="listItem" items="${list}">
<c:forEach var="anotherTesting" items="${map[listItem.item]}">
<option><c:out value="${anotherTesting}"/></option>
</c:forEach>
</c:forEach>
关于java - 连接 JSTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109164/