Thymeleaf中按钮th:href无法跳转至编辑页面的问题
问题分析与解决方案
看起来你的问题根源在于按钮标签的使用方式不对——你给<button>加了th:href,但Thymeleaf的th:href属性是专门为链接元素(比如<a>标签)设计的,<button>本身不支持这个属性来实现跳转,而且你设置了type="submit",这个按钮又不在任何<form>标签里,点击后自然不会触发跳转行为。
好在后端的编辑页面路由是正常的(直接输URL能访问),只需要调整前端的按钮写法就行,给你几种可行的方案:
方案1:改用<a>标签(推荐)
把按钮换成<a>标签,然后用Bootstrap的btn类让它看起来像按钮,这样th:href就能正常工作了:
<a class="btn btn-warning" th:href="@{'/user/edit/' + ${user.id}}">Edycja</a>
这是最符合Web语义的做法,链接跳转本来就是<a>标签的职责,样式上完全可以和按钮一致。
方案2:保留<button>标签,添加JavaScript跳转
如果你一定要用<button>,记得把type改成button(避免默认的submit行为),然后通过JavaScript实现跳转:
<button type="button" class="btn btn-warning" th:onclick="|window.location.href='/user/edit/' + ${user.id}|">Edycja</button>
这里用了Thymeleaf的文本拼接语法|...|来动态生成跳转URL,确保每个用户对应正确的编辑页面。
方案3:把按钮放在表单里(不推荐,但可行)
把编辑按钮包裹在一个GET方法的表单里,利用表单提交来跳转:
<form th:action="@{'/user/edit/' + ${user.id}}" th:method="get"> <button type="submit" class="btn btn-warning">Edycja</button> </form>
这种方法虽然能实现功能,但语义上不太合适,因为跳转不是表单提交的典型场景,所以更推荐方案1。
内容的提问来源于stack exchange,提问作者Pawel Nackiewicz
相关产品推荐
相关产品推荐

