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

Thymeleaf模板中为隐藏字段赋值,使控制器识别调用方

问题解决:Thymeleaf隐藏字段无法传递值到控制器

问题根源

你当前的隐藏字段写法存在两处错误:

  • th:field="*{fromHiddenField}" 会自动生成与字段名匹配的name属性,但你手动添加的name="hiddenfield"覆盖了这个值,导致提交的参数名是hiddenfield,和User类的fromHiddenField字段不匹配,Spring无法完成参数绑定。
  • value="'valueSetInHiddenField'" 写法错误,Thymeleaf中直接写字符串值即可,额外的单引号会被当作值的一部分,或者用th:value来赋值更规范。

修正后的模板代码

<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<form action="#" th:action="@{/submitForm}" th:object="${user}" method="post">
    <!-- 正确的隐藏字段写法 -->
    <input type="hidden" th:field="*{fromHiddenField}" th:value="valueSetInHiddenField"/> 
    <input type="text" th:field="*{name}" size="30" maxlength="255" />
    <input type="text" th:field="*{email}" size="30" maxlength="255" />
    <input type="submit" name="form_submit" value="send" />
    <input type="reset" name="form.button.cancel" value="reset" />
</form>
</html>

如果不需要动态生成值,也可以直接用value属性(注意不要加单引号):

<input type="hidden" th:field="*{fromHiddenField}" value="valueSetInHiddenField"/>

控制器示例

确保控制器方法正确接收绑定的User对象:

@PostMapping("/submitForm")
public String handleSubmit(@ModelAttribute User user) {
    // 此时可以正常获取到fromHiddenField的值
    System.out.println(user.getFromHiddenField());
    return "result";
}

关键注意点

  • th:field是Thymeleaf表单绑定的核心属性,它会根据th:object指定的模型对象自动生成匹配的name和id属性,不要手动覆盖name,否则会破坏参数绑定的对应关系。
  • 静态赋值时直接写字符串值,动态赋值则使用th:value配合Thymeleaf表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:53:21