Thymeleaf中带有变量的绝对URL

7

我正在尝试使用Thymeleaf将域名URL注入到链接中。我的URL是从控制器传递的,因为我记录了日志并看到了它。

在我的Thymeleaf HTML模板中,我的链接如下:

<link type="text/css" th:href="@{${DomainUrl}/web/assets/css/foundation5/foundation.min.css}" rel="stylesheet" />

然而,当我在本地运行它时,它并没有替换域名,例如,会出现错误(因为URL当然找不到),呈现如下: http://localhost:8081/pss/ui/$%7BDomainUrl%7D/web/assets/css/components.css


应该像那样工作。也许 DomainUrl 视图变量没有设置? - Antoniossss
我将其添加并记录以确保它被填充。 mav.addObject("DomainUrl", ctx.getDomainUrl()); - OakvilleWork
[[${DomainUrl}]]作为文本节点(HTML中的简单文本)添加到您的标记中,这样是否呈现给定域? - Antoniossss
是的,它确实打印出来了。我发现有一个基本的URL标签,这就是为什么它会放入域名的原因,但是我已经将其删除了,当它是一个链接时,就像我的例子:<link type="text/css" th:href="@{${DomainUrl}/web/assets/css/foundation5/foundation.min.css}" rel="stylesheet" /> 仍然没有填充正确的域名,也许是控制器中的标签使链接变得相对。你有什么关于我可以查找哪个Spring bean的想法吗? - OakvilleWork
所以你需要相对路径还是绝对路径?我现在有点迷失了。在这个主题上,也可以查看Thymeleaf文档。也许其中一个#bean会有帮助。 - Antoniossss
3个回答

7

好的,为了使这个工作正常,您必须使用预处理运算符__expression__来获取正确的链接,这样你最终会得到类似以下的结果:

<link type="text/css" th:href="@{__${DomainUrl}__/web/assets/css/foundation5/foundation.min.css}" rel="stylesheet" />

这将进行预处理和解析${DomainUrl}表达式,并将生成的字符串传递给@表达式处理器。 经过测试,效果非常好:

<a th:href="@{__${currentUrl}__/blah/blah/blahhhh}">hey there</a>

生成

<a href="http://localhost:8080/admin/place/list/blah/blah/blahhhh">hey there</a> 

其中 http://localhost:8080/admin/place/list/currentUrl

在我的


应该被接受为答案,或者至少应该提到为什么这个答案没有解决那个问题(它对我起作用了)。 - MD TAREQ HASSAN

2
我找到了解决方案。我必须将链接转换为文字形式,如下所示:
<link type="text/css" th:href="@{|${DomainUrl}/web/assets/css/foundation5/normalize.css|}" rel="stylesheet" />

0

尝试

<link type="text/css" th:href="@{${DomainUrl + '/web/assets/css/foundation5/foundation.min.css'}}" rel="stylesheet" />

${DomainUrl} 是否以 http:// 或者 https:// 开头?这会对使用 @{} 表达式创建链接时产生影响。


你能详细说明一下它们之间的区别吗? - Antoniossss
当你说“绝对URL”时,它有一个特定的含义——它以http://https://开头。请参阅Thymeleaf文档:http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#link-urls。至于我创建的链接,你不能像你所做的那样混合未引用的字符串和变量。这就是为什么我把URL的其余部分放在`${}`中的原因。 - Metroids
啊,我明白你的意思了。我理解这里使用https和http有所不同...交替使用方案会让人感到困惑。 - Antoniossss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接