首页
学习
活动
专区
圈层
工具
发布

控制JSTL
EN

Stack Overflow用户
提问于 2013-10-01 06:10:23
回答 2查看 846关注 0票数 1

控制器中有一个HashMap

代码语言:javascript
复制
HashMap<String, ArrayList<String> map = new HashMap<String, ArrayList<String>();

在JSP页面中,我希望通过这样的方法来访问这个页面:

代码语言:javascript
复制
<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']都可以。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 06:17:49

我想简单地说这是可行的:

代码语言:javascript
复制
<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属性的属性。

因此,您的循环可以修改为:

代码语言:javascript
复制
<c:forEach var="listItem" items="${list}">
   <c:forEach var="anotherTesting" items="${map[listItem.item]}">
      <option><c:out value="${anotherTesting}"/></option>
   </c:forEach>
</c:forEach>
票数 3
EN

Stack Overflow用户

发布于 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>>>,那么代码将是:

代码语言:javascript
复制
<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}是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19109164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档