所以我试图通过Thymeleaf生成(动态)链接。
现在我想链接到的第一个网址是 /resource/id所以我有以下内容:
<a th:href="|/resource/${resource.id}|" href="#" class="btn btn-default">Edit...</a>
它工作得很好,并且完全符合您的期望。
所以我想链接到的下一个网址是 /resource/id/child/id所以我尝试以下操作:
<a th:href="|/resource/${resource.id}/child/${child.id}|" href="#" class="btn btn-default">Edit...</a>
我以为这会给我我想要的。相反,我得到了:
/resource/3/child%7D?id=4
这很奇怪也很混乱。我不知道为什么会发生这种情况,也不知道如何得到我想要的:
/resource/3/child/4
非常感谢任何帮助。如果有任何不同,我正在使用spring-boot/spring-mvc。
更新:好的,所以在重新阅读(和理解)留档后,事实证明更正确的语法是:
<a th:href="@{/resource/{rid}/child/{cid}(rid=${resource.id} cid=${child.id})}" href="#" class="btn btn-default">Edit...</a>
现在我得到了网址:
/resource/3/child?id=4
虽然非常接近,但仍然有点错误和混乱。
Thymeleaf不支持多个路径变量吗?
我想少了一个逗号。像这样试试:
th:href="@{/resource/{rid}/child/{cid}(rid=${resource.id},cid=${child.id})}"
每个键/值都应该用逗号分隔,以便正确构建具有多个路径变量的URL。
使用url时,您最好使用url语法@{…}而不是文字替换。例如在您的情况下:
<a th:href="@{/resource/{resource.id}/child/{child.id}}"
href="#" class="btn btn-default">Edit...</a>
(注意在rest资源占位符中没有美元符号)
你检查过child.id?的值吗?我经常使用它,比如@{|/source/${resource.id}/child/${child.id}|}
。你可以用来计算语法