如何使用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
相关产品推荐
相关产品推荐

