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

如何在Spring MVC控制器中获取Thymeleaf th:value字段的数据?

问题原因分析

你之所以用@RequestParam拿不到th:value里的内容,核心原因是你的<input>标签缺少name属性。HTTP表单提交参数时,是通过元素的name属性来标识参数名的——没有name的话,浏览器在提交表单时根本不会把这个字段的值发送到后端,Spring MVC自然找不到对应的personId参数。

简单解决方案(无需绑定对象)

下面几种方案都能满足你“单字段处理、不绑定完整对象”的需求,而且完全不影响表单后续绑定其他对象:

方案1:给input添加name属性(最直接)

直接给<input>加上name属性,和th:value配合使用即可:

<form action="form1" method="post">
  <!-- 添加name="personId" -->
  <input type="text" name="personId" th:value="${personId}"/>
  <input type="submit" name="btnSubmit" value="Submit">
</form>

后端的控制器代码不需要修改,@RequestParam("personId")就能正常获取到值了:

@RequestMapping(value="/form1", params = "btnSubmit", method = RequestMethod.POST)
public String formMethod (@RequestParam("personId") int personId) {
  // 这里可以正常使用personId
  return "";
}

方案2:用Thymeleaf的th:name属性(更贴合Thymeleaf写法)

如果你习惯用Thymeleaf的命名空间属性,也可以用th:name代替原生name,效果完全一样:

<input type="text" th:name="personId" th:value="${personId}"/>

方案3:如果字段不需要用户修改,用隐藏域

如果这个personId是不需要用户编辑的固定值,可以改成隐藏输入框,避免用户误修改,同时依然能提交参数:

<input type="hidden" name="personId" th:value="${personId}"/>
补充说明

这些方案都不需要你创建实体类、使用th:object或@ModelAttribute,完全是单字段的独立处理方式。后续如果需要给表单绑定其他对象,只需要给对应字段添加th:field即可,和这个单字段的处理不会冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:27:30