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
相关产品推荐
相关产品推荐

