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

发布于 2024-10-17 00:07:46 字数 193 浏览 1 评论 0原文

嗨,

我需要能够做这样的事情(当然这是行不通的:

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

谢谢

HI,

I need to be able to do something like this (of course this doesn't work:

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

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

游魂 2024-10-24 00:07:46

使用括号:

${requestScope[listName].eanbledColumns}

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

${model[listName].enabledColumns}

Use brackets:

${requestScope[listName].eanbledColumns}

or, if your model is actually a map within the request, then:

${model[listName].enabledColumns}
后知后觉 2024-10-24 00:07:46

如果此上下文中的 ${listName} 是您的 model 的属性(您通常通过 model.getListNameX() 访问该属性,则此只能通过反射来实现,而表达式语言对此不支持,

但如果您想迭代这些 ${listName} ,那么重构您的类似乎会更有帮助。 (假设这些当前是您的 model 的属性),为什么不保留一个以枚举常量作为键的映射以及您想要通过 ${listName} 作为值?(EnumMap 在这里会很有帮助)。

然后,您可以将 Enum.values() 设置为请求属性,将它们作为 进行迭代。 listName 并具有:

${model.lists[listName].enabledColumns}

If the ${listName} in this context is a property of your model (something you would normally access as model.getListNameX(), this would only be possible with reflection, and the Expression Language has no support for that.

But it looks like a refactoring of your class would be more helpful. If you want to iterate through those ${listName}s (assuming these are currently properties of your model) , why don't you just keep a map with enum constants as keys and those objects you want to reference via ${listName} as values ? (an EnumMap would be helpful here).

Then, you can set the Enum.values() as a request attribute, iterate through them as listName and have:

${model.lists[listName].enabledColumns}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文