spring-boot - Thymeleaf 带有锚点的链接 url 表达式
问题描述
我需要用锚在百里香中创建一个网址。像:
/import#34546
但是链接 url 表达式不起作用。
<a th:href="@{import#{id}(id=${object.id}}">link</a>
有人使用 thymeleaf 获取此网址?
我将百里香与 spring-boot 2.5.4 一起使用。
谢谢!
解决方案
概括
Thymeleaf 不支持使用表达式来评估 URL 片段。它假定片段将被硬编码。
因此,我建议您@{...}
对片段以外的所有内容使用语法组合,然后使用字符串连接来构建带有 Thymeleaf${...}
表达式的片段。
一个例子(还有其他方法可以进行连接):
<a th:href="@{import} + ${'#' + object_id}">link</a>
这使您仍然可以利用 的功能@{...}
,例如处理绝对和相对 URL。
细节
查看该类的 Thymeleaf 源代码StandardLinkBuilder
,我们可以看到如何处理URL 片段(#
及其后续片段标识符)。
需要注意的点是:
URL 的片段部分在此处提取:
urlFragment = linkBase.substring(hashPosition);
哈希位置是#
URL 字符串中 a 的位置。
然后从 URL 字符串中删除此子字符串:
linkBase.delete(hashPosition, linkBase.length());
稍后(参见此处),在处理完所有其他参数后,将 urlFragment 添加回 URL,保持不变:
linkBase.append(urlFragment);
因此,没有处理 URL 片段的 Thymeleaf 表达式变量 - 它只是被视为“硬编码”字符串。
这意味着您可以执行以下操作,其中#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>
推荐阅读
- python - 将 3D 数组添加到 4D 数组
- php - 如何通过 PHP 在 HTML 中显示 MySQL 数据库表中的值?
- bash - 使用 GNU Parallel 通过 rsync 在 LAN 上进行集群计算
- html - 如何将类、id 或属性添加到树枝包括?
- javascript - Javascript 中的实例,使用 RHS 上的变量
- javascript - 使用 javascript 将 base64 字符串保存到 excel (.xls) 文件?
- javascript - JavaScript 饼图函数和回调仅显示数据库中的最后一个元素
- ruby-on-rails - 检查子类是否是父类的实例
- node.js - 节点条带部署问题
- sql - 日期之间的时间。(比 Datediff 更先进)