如何使用 Thymeleaf 的显式链接?

Posted

技术标签:

【中文标题】如何使用 Thymeleaf 的显式链接?【英文标题】:How to use explicit links with Thymeleaf? 【发布时间】:2021-08-14 15:07:15 【问题描述】:

我想在 Spring+Thymeleaf Web 应用程序中创建并链接到外部站点并插入如下链接:<a th:href="@https://example.com">Link</a>

但是,通过点击链接,它会尝试指向内部位置 http://localhost/service/https://example.com,而不是外部网站 https://example.com。

网站只给出一个错误"status":500,"error":"Internal Server Error","message":"The request was rejected because the URL was not normalized."

出了什么问题以及如何与 Thymeleaf 建立绝对链接?

【问题讨论】:

为什么不直接使用<a href="https://example.com">Link</a><a th:href="https://example.com">Link</a> 不是一个答案 - 只是一个观察:该语法是正确的。其他东西(过滤器?Spring?)可能正在重写 URL。就像测试一样,如果您硬编码 URL:<a href="https://example.com">Link</a>,会发生什么?甚至<a th:href="@'https://example.com'">Link</a>? <a href="https://example.com">Link</a> 也不起作用,它的作用完全相同。我正在尝试找出某些东西如何重写 URL 或如何禁用它 【参考方案1】:

问题在于该应用程序是在其他 Spring+Thymeleaf 项目之上构建的。我让链接工作的唯一方法是这样的。

<a th:text="link" th:onclick="|window.location.href='@https://example.com'|"></a>

我知道这不是“真实”链接,无法配置为使用 target="_blank" 左右打开,但它适用于此用例。

【讨论】:

【参考方案2】:

如果链接是静态链接,您可以简单地使用 <a href="https://example.com">Link</a>

如果是动态的, 您可以在模板中使用<a th:href="$link">Link</a>。在控制器中 return new ModelAndView("page").addObject("link", <link>)

【讨论】:

基本 html 链接 <a href="https://example.com">Link</a> 也不起作用,它在这里的工作方式完全相同。链接指向http://LOCALWEBSITE/service/https://example.com 而不是https://example.com,就像我预期的那样。 <a href="https://www.instagram.com/ecomselfmade" target="_blank" class="text-gray-350"><img src="/icons/instagram.svg" width="24" height="24" alt=""></a>我在我的模板中使用它,它按预期工作@JukkaS。

以上是关于如何使用 Thymeleaf 的显式链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建连接本地的临时表,而无需强制使用简单的显式创建表语句?

动态负载库和运行时误解的显式链接

如何插入具有空值的显式 id 属性的数据?

我应该如何确定查询返回到 GraphQL 接口类型的显式类型?

如何避免包含`a(i)= b(i,c(i))`的显式循环?

OpenGL着色器的显式与自动属性位置绑定