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

Spring MVC表单select标签报错:String类型不适用于选项items

Spring MVC表单select标签报错:String类型不适用于选项items

我来帮你分析下这个问题,你遇到的Type [java.lang.String] is not valid for option items报错,本质是Spring MVC的form:select标签的items属性收到了字符串类型的值,但它要求的是集合/数组这类可迭代的数据,问题主要出在这两个地方:

1. EL表达式语法错误 + Model中无对应属性

你JSP里写的items="{$districtsList}"有两个明显问题:

  • EL表达式的正确写法是${变量名},你写成了{$},这会让Spring把这个字符串直接当作items的数据源,自然就触发了“String类型无效”的错误;
  • 你的控制器里并没有把名为districtsList的属性添加到Model中,你是把地区集合存到了register对象的districts属性里。

2. path属性使用不符合select标签的要求

你当前的path="districts"指向的是register里的集合属性,但form:select的path应该对应单个实体对象(用来存储用户选中的那一个选项),而集合数据应该放在items属性里。


修正方案

第一步:调整控制器(二选一即可)

  • 选项一:把地区集合单独添加到Model中
    在控制器的showWelcomePage方法里,获取到districts后,加上一行:
    model.addAttribute("districtsList", districts);
    
  • 选项二:直接复用register对象里的集合
    不需要额外修改控制器,后续JSP里直接通过register对象访问即可。

第二步:修改JSP代码

首先修正EL表达式,然后调整path属性(假设你的Register类新增了一个属性private EntityModelDistrict selectedDistrict;用来保存选中的地区):

<form:form method="post" action="/register" modelAttribute="register">
    <div class="row">
        <div class="col-lg-12 no-pdd">
            <div class="sn-field">
                <!-- 这里的itemValue和itemLabel要替换成你EntityModelDistrict类里的实际属性名 -->
                <!-- 如果用选项一的Model属性: -->
                <form:select path="selectedDistrict" items="${districtsList}" itemValue="id" itemLabel="districtName" multiple="false"/>
                <!-- 如果用选项二的register对象属性: -->
                <!-- <form:select path="selectedDistrict" items="${register.districts}" itemValue="id" itemLabel="districtName" multiple="false"/> -->
                <i class="la la-dropbox"></i>
                <span><i class="fa fa-ellipsis-h"></i></span>
            </div>
        </div>
    </div>
</form:form>

注意:itemValue是选项的value值对应的实体属性,itemLabel是页面上显示的选项文本对应的实体属性,要根据你EntityModelDistrict类的实际字段名修改。


这样调整后,Spring就能正确识别items的集合数据源,同时path也能正确绑定选中的地区对象,应该就能解决这个报错了。

备注:内容来源于stack exchange,提问作者Saimuga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:53:04