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

Spring MVC form:select提交返回map的key而非选中值问题排查

问题原因

Spring MVC的<form:options>标签绑定Map类型参数时,默认规则为:

  • Map的key对应生成<option>标签的value属性(表单提交时实际传参的值)
  • Map的value对应<option>标签的页面显示文本
    你配置的countries.properties中key为国家缩写、value为国家全称,因此提交表单时默认拿到的就是缩写值,属于框架默认行为。

解决方案

方案1:直接提交国家全称(修改前端下拉框配置)

如果业务需要直接提交显示的国家全称,只需在userForm.jsp的<form:options>标签上显式指定itemValue为Map的value即可,修改后代码如下:

<form:select path="country">
    <form:options items="${countries}" itemValue="value" itemLabel="value"/>
</form:select>

修改后生成的下拉框代码为<option value="France">France</option>,提交时就会直接传国家全称。

方案2:保留缩写存值逻辑,结果页转成全称展示

如果业务需要存储国家缩写、仅展示时用全称,就不需要修改前端提交逻辑,只需在结果返回前做一次key转value的映射即可:

  1. 首先在Controller的filledForm方法中将国家映射关系存入Model:
@PostMapping("processForm")
public String filledForm(@ModelAttribute("user") User user, Model model) {
    model.addAttribute("countries", listCountry);
    return "viewForm";
}
  1. 然后修改viewForm.jsp的国家展示逻辑,用缩写从Map里取全称:
pays: ${countries[user.country]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:54:03