如何使用 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 的显式链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建连接本地的临时表,而无需强制使用简单的显式创建表语句?