使用 Thymeleaf 生成带有参数和嵌套变量的 URL
Using Thymeleaf in order to generate a URL with params and nested variables in it
我正在尝试使用 Thymeleaf 来生成带有参数的 URL。
<a th:with="baseUrl=${websiteContext} + '/#/email/activate/'" th:href="@{${baseUrl}(token=${member.token},newEmail=${requestedEmail})}" >Activate email</a>
生成以下 link:
http://localhost:8080/?token=1a964190-7807-47ee-a36b-e3712eeb24f4&newEmail=balteo%2540yahoo.fr#/email/activate/
然而,文字字符串 /#/email/activate/
总是在 url...
的末尾结束
请注意,我需要 url 中的 #
,因为我的前端基于 angular。
有人可以帮忙吗?
根据 thymeleaf docs:
这似乎是预期的行为
Fragment identifiers can be included in URLs, both with and without parameters. They will always be included at the URL base, so that:
<a th:href="@{/home#all_info(action='show')}">
…would output as:
<a href="/home?action=show#all_info">
还有this issue,记者遇到的问题与您完全相同。
以防 link 失效,决定暂时不实现可选的行为切换,因为 URL 参数是为服务器设计的,应该在 URL 片段(在 #
之前),并且不同的客户端框架可能需要不同的方式将参数传递给它们,而不是简单地将它们附加在片段之后。
还引用了建议的解决方法:
As a workaround, you can create your URL by appending your parameters manually, though you will have to perform URL-encoding of your parameter values yourself. For example, you can use a |...|
literal substitution like: @{|${resetTokenLink}?r=${token}|}
顺便说一句,我试图重现您的确切示例并得到以下结果:/#/email/activate/?token=1a964190-7807-47ee-a36b-e3712eeb24f4&newEmail=balteo%252540yahoo.fr
,我相信这是您所期望的,但它是与 thymeleaf 2.0.5 一起使用的。然后我用最新的又试了一次,得到了你的结果...
我正在尝试使用 Thymeleaf 来生成带有参数的 URL。
<a th:with="baseUrl=${websiteContext} + '/#/email/activate/'" th:href="@{${baseUrl}(token=${member.token},newEmail=${requestedEmail})}" >Activate email</a>
生成以下 link:
http://localhost:8080/?token=1a964190-7807-47ee-a36b-e3712eeb24f4&newEmail=balteo%2540yahoo.fr#/email/activate/
然而,文字字符串 /#/email/activate/
总是在 url...
请注意,我需要 url 中的 #
,因为我的前端基于 angular。
有人可以帮忙吗?
根据 thymeleaf docs:
这似乎是预期的行为Fragment identifiers can be included in URLs, both with and without parameters. They will always be included at the URL base, so that:
<a th:href="@{/home#all_info(action='show')}">
…would output as:
<a href="/home?action=show#all_info">
还有this issue,记者遇到的问题与您完全相同。
以防 link 失效,决定暂时不实现可选的行为切换,因为 URL 参数是为服务器设计的,应该在 URL 片段(在 #
之前),并且不同的客户端框架可能需要不同的方式将参数传递给它们,而不是简单地将它们附加在片段之后。
还引用了建议的解决方法:
As a workaround, you can create your URL by appending your parameters manually, though you will have to perform URL-encoding of your parameter values yourself. For example, you can use a
|...|
literal substitution like:@{|${resetTokenLink}?r=${token}|}
顺便说一句,我试图重现您的确切示例并得到以下结果:/#/email/activate/?token=1a964190-7807-47ee-a36b-e3712eeb24f4&newEmail=balteo%252540yahoo.fr
,我相信这是您所期望的,但它是与 thymeleaf 2.0.5 一起使用的。然后我用最新的又试了一次,得到了你的结果...