如何在JSP循环中使用动态集合名称?

时间:2011-02-10 16:45:14

标签: java jsp jstl el

HI,

我需要能够做这样的事情(当然这不起作用:

  <c:forEach var="column" items="${model.${listName}.enabledColumns}">
    ${column.name}
  </c:forEach>

由于

2 个答案:

答案 0 :(得分:3)

使用括号:

${requestScope[listName].eanbledColumns}

或者,如果您的model实际上是请求中的地图,那么:

${model[listName].enabledColumns}

答案 1 :(得分:1)

如果此上下文中的${listName}是您model的属性(您通常会将其作为model.getListNameX()访问的内容,那么这只能通过反射来实现,并且表达式语言没有支持。

但看起来你的课程重构会更有帮助。如果你想迭代那些${listName}(假设这些是model的当前属性),为什么不把一个带有枚举常量的映射作为键和那些你想通过它引用的对象${listName}作为价值观? (EnumMap会对此有帮助。)

然后,您可以将Enum.values()设置为请求属性,将其作为listName进行迭代,然后执行以下操作:

${model.lists[listName].enabledColumns}