提问者:小点点

ThymeleafURL语法令人困惑


所以我试图通过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不支持多个路径变量吗?


共3个答案

匿名用户

我想少了一个逗号。像这样试试:

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}|}。你可以用来计算语法

相关问题