Thymeleaf URL语法令人困惑

时间:2015-03-01 17:45:01

标签: spring-boot thymeleaf

所以我试图通过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 个答案:

答案 0 :(得分:2)

我认为缺少逗号。试试这样:

th:href="@{/resource/{rid}/child/{cid}(rid=${resource.id},cid=${child.id})}"

每个键/值应使用逗号分隔,以便正确构建具有多个路径变量的URL。

答案 1 :(得分:0)

使用网址时,最好使用网址语法@ {...}而不是字面替换。 例如,在您的情况下:

    <a th:href="@{/resource/{resource.id}/child/{child.id}}" 
          href="#" class="btn btn-default">Edit...</a>

(注意休息资源占位符中没有美元符号)

答案 2 :(得分:0)

你检查了child.id的值吗?我经常使用@{|/resource/${resource.id}/child/${child.id}|}。 您可以评估语法 <a th:with="child_id='4'" th:href="@{|/resource/${resource.id}/child/${child_id}|}" 并将<span th:text="${child.id}"></span>添加到您的html中,以查看child.id的值。