Thymeleaf模板报错:禁止实例化对象与访问静态类/参数
解决Thymeleaf表单action拼接参数触发TemplateProcessingException的问题
错误原因
你之前直接在@{/admin/changeBook/}里拼接${param.id}的写法不符合Thymeleaf的URL表达式规范,这种方式会触发上下文限制,导致禁止访问参数的错误。Thymeleaf有专门的URL参数传递语法,不需要手动拼接字符串。
解决方案
根据你的后台接口类型选择对应的写法:
1. 当id作为路径变量时(后台接口为/admin/changeBook/{id})
用URL占位符+参数赋值的方式:
<form th:action="@{/admin/changeBook/{bookId}(bookId=${param.id})}" method="post"> <!-- 表单内容 --> </form>
Thymeleaf会自动把${param.id}的值替换到路径占位符{bookId}的位置,生成类似/admin/changeBook/123的路径。
2. 当id作为查询参数时(后台接口为/admin/changeBook)
直接在URL表达式的括号里指定参数键值对:
<form th:action="@{/admin/changeBook(id=${param.id})}" method="post"> <!-- 表单内容 --> </form>
生成的URL会自动带上查询参数,类似/admin/changeBook?id=123。
关键说明
${param.id}是Thymeleaf内置的获取当前请求查询参数的表达式,只要请求里存在id参数,就能正确取值。- 这种写法完全符合Thymeleaf的表达式规则,不会触发你遇到的
TemplateProcessingException,也不需要额外通过Model传递id参数。
内容的提问来源于stack exchange,提问作者dimitri08
相关产品推荐
相关产品推荐

