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的映射即可:
- 首先在
Controller的filledForm方法中将国家映射关系存入Model:
@PostMapping("processForm") public String filledForm(@ModelAttribute("user") User user, Model model) { model.addAttribute("countries", listCountry); return "viewForm"; }
- 然后修改
viewForm.jsp的国家展示逻辑,用缩写从Map里取全称:
pays: ${countries[user.country]}
内容的提问来源于stack exchange,提问作者OzZzL
相关产品推荐
相关产品推荐

