Thymeleaf th:href生成错误跳转地址问题咨询
问题原因及修复方案
核心问题
问题出在main.html中列表项的链接写法错误,不符合Thymeleaf的URL路径变量语法:
<a th:href="@{/profiles/(${profiles.id})}" th:text="*{profiles.firstName}"></a>
这种写法会让Thymeleaf错误地将(${profiles.id})解析为查询参数而非路径变量,最终生成localhost:8080/profiles/?1这类错误URL。
正确写法
Thymeleaf中传递路径变量的标准语法是在URL模板后用括号指定变量映射:
<div th:each="profile : ${profiles}"> <a th:href="@{/profiles/{id}(id=${profile.id})}" th:text="${profile.firstName}"></a> </div>
同时注意两个细节:
- 循环变量名建议用单数
profile而非复数profiles,避免和集合变量名冲突 th:text中直接用${profile.firstName}即可,不需要*{}(*{}是基于th:object的选择表达式,这里没有绑定对象)
额外优化提示
profiles.html中的<div>标签使用th:method="GET"是无效的,因为th:method只适用于表单标签。该页面只需要控制器通过GET请求映射/profiles/{id}来返回对应档案数据即可。
内容的提问来源于stack exchange,提问作者Maksim1251
相关产品推荐
相关产品推荐

