我正在开发一个 Spring Boot 应用程序,使用 Thymeleaf 作为视图层。在我的一个模板中,我需要创建一个用于更新书籍的表单。但是,我在渲染模板时遇到以下错误:
org.thymeleaf.exceptions.TemplateProcessingException: Instantiation of new objects and access to static classes or parameters is forbidden in this context (template: "book-change" - line 12, col 7)
这是我的 Thymeleaf 模板中的相关代码(
book-change.html
):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
<title>Change book</title>
</head>
<body>
<h1>Change book</h1>
<a th:href="@{/admin}">Admin panel</a>
<h2>Book</h2>
<form method="post" th:object="${bookToChange}" th:action="@{'/admin/changeBook/' + ${param.id}}">
<label>
Title:
<input type="text" th:field="*{title}" placeholder="Title"/>
</label>
<label>
Author:
<input type="text" th:field="*{author}" placeholder="Author"/>
</label>
<label>
Year:
<input type="number" th:field="*{year}" placeholder="Year"/>
</label>
<label>
Keywords:
<input type="text" th:field="*{keywords}" placeholder="Keywords"/>
</label>
<button type="submit">Change Book</button>
</form>
</body>
</html>
param.id
已正确传递,并且我已确认它包含预期值,因为它在模板中的其他位置正确呈现。
我尝试通过 Model 添加 id 并且它有效,但我认为这不是最好的方法,因为 Thymeleaf 可以从 URL 获取参数。
我已将
th:action
替换为:
th:action="@{/admin/changeBook/{id}(id=${param.id})}"