控制器中有一个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']都可以。
发布于 2013-10-01 06:17:49
我想简单地说这是可行的:
<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>发布于 2013-10-01 06:19:35
${...}中的代码不是JSTL,而是Expression Language。您不需要c̶o̶n̶c̶a̶t̶e̶n̶a̶t̶e̶nest EL̶表达式,只需将其简单地添加。
知道了这一点,表达式${testing['${list.item}']}将是${testing[list.item]}。
但是注意到,这不是您真正想要的/需要的,除非testing确实是一个Map<String, ArrayList<String>>,否则您将得到意想不到的结果。从上面的代码中,假设requestScope.list是一个List<Map<String, ArrayList<String>>>,那么代码将是:
<c:forEach var="listItem" items="${list}">
<c:forEach var="innerString" items="${map[listItem.item]}">
<option><c:out value="${innerString}"/></option>
</c:forEach>
</c:forEach>请注意,假设没有${list}属性,页面、会话或应用程序作用域中也没有list属性,那么${map}与${map}是相同的。
https://stackoverflow.com/questions/19109164
复制相似问题