You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用List<Object[]>填充JSP中的<form:select>标签?

解决Spring MVC中用List<Object[]>填充form:select的问题

这个场景我之前处理过,确实不用在Controller里转成Map,直接在JSP里就能搞定,给你两种实用的方案:

方案一:利用Spring表达式语言(SpEL)

Spring的<form:options>标签支持SpEL表达式,你可以通过item变量引用列表中的每个Object[]元素,再用数组索引访问对应的值:

<form:select path="yourFormFieldName">
    <form:options items="${states}" itemValue="#{item[0]}" itemLabel="#{item[1]}"/>
</form:select>

原理说明:

  • item是<form:options>内置的变量,代表${states}列表中的每一个Object[]元素
  • #{item[0]}通过SpEL语法直接访问数组的第一个元素,作为选项的value
  • #{item[1]}则访问数组的第二个元素,作为选项显示的label

方案二:用JSTL循环手动生成选项

如果你的Spring版本比较旧,或者更倾向于直观的写法,也可以用JSTL的<c:forEach>循环手动构建<option>标签:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<form:select path="yourFormFieldName">
    <c:forEach items="${states}" var="state">
        <option value="${state[0]}">${state[1]}</option>
    </c:forEach>
</form:select>

原理说明:

  • <c:forEach>遍历${states}列表,每个元素赋值给state变量
  • ${state[0]}和${state[1]}是EL表达式的数组访问语法,直接取对应索引的元素值
  • 手动生成的<option>标签完全兼容Spring的<form:select>,不会影响表单绑定逻辑

之前你尝试的写法失败,是因为<form:options>的itemValue和itemLabel默认是要访问对象的JavaBean属性(比如get0()这种,显然Object类没有),而不是数组索引。用上面两种方法就能绕开这个限制,直接操作数组元素。

内容的提问来源于stack exchange,提问作者Shantaram Tupe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:50:54