我需要在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>