胸里叶带锚的链接url表达式



我需要在thymleaf中创建一个url。如:

/import#34546

但是链接url表达式不工作

<a th:href="@{import#{id}(id=${object.id}}">link</a>

有人得到这个url使用thymeleaf?

我使用百里香叶与spring-boot 2.5.4。

谢谢!

摘要

Thymeleaf不支持使用表达式来计算URL片段。它假定片段是硬编码的。

因此,我建议您使用@{...}语法的组合,除了片段,然后使用字符串连接来构建带有thyymeleaf${...}表达式的片段。

一个例子(也有其他方法进行串联):

<a th:href="@{import} + ${'#' + object_id}">link</a>

这允许您仍然利用@{...}的特性,例如处理绝对和相对url。

查看StandardLinkBuilder类的Thymeleaf源代码,我们可以看到URL片段(#及其后面的片段标识符)是如何处理的。

注意事项:

URL的片段部分在这里提取:

urlFragment = linkBase.substring(hashPosition);

哈希位置是#在URL字符串中的位置。

然后从URL字符串中删除此子字符串:

linkBase.delete(hashPosition, linkBase.length());

之后(见这里),在所有其他参数都被处理后,urlFragment被添加回URL,不变:

linkBase.append(urlFragment);

因此,没有处理URL片段的胸里叶表达式变量-它只是被视为"硬编码"的;字符串。

这意味着您可以这样做,其中#foo是硬编码的:

<a th:href="@{import/{id}#foo(id=${object_id})}">link</a>

但是你不能这样做(并且得到想要的结果):

<a th:href="@{import/{id_a}#{id_b}(id_a=${object_id},id_b=${object_id})}">link</a>

最新更新