Thymeleaf:在客户端上取消编码或编码URL

时间:2017-06-27 22:42:53

标签: java thymeleaf

我使用Thymeleaf作为前端。

我有一些自然语言的菜单类别,我在网页上显示并传递给服务器。

例如,我有一类"我最喜欢的猫"

该类别位于变量 $ {category.key}

此类别有链接;



<a th:href="|http://myserver?selectedCategory=${category.key}|><span th:text=${category.key}></span></a>
&#13;
&#13;
&#13;

  • 如果我在服务器上没有URLEncode $ {category.key},那么当a 用户单击该链接,如果有,则selectedCategory参数为null 是类别字符串中的空格。
  • 如果我对类别字符串进行编码,则选择selectedCategory参数 传递给服务器很好但链接文本显示为 我最喜欢的+ +猫

我不想要两个变量,一个是编码的,一个是未编码的。

作为Thymeleaf HTML编译过程的一部分,我如何编码或取消编码$ {category.key}?

3 个答案:

答案 0 :(得分:2)

如果使用url语法(which was supplied in a comment above)构建字符串,那么Thymeleaf将对url进行编码。对于您的示例网址,它应如下所示 - 使用@符号而不是$

<a th:href="@{http://myserver(selectedCategory=${category.key})}" th:text="${category.key}" />

(另外,你不需要额外的跨度。)

答案 1 :(得分:2)

@symbol是Thymeleaf中的服务器上下文路径。你使用@symbol。

<a href="#" th:href="@{/your server context path?selectedCategory=__${category.key}__}">
<span th:text="${category.key}"> </span></a>

答案 2 :(得分:0)

使用@symbol绝对是主要选择。但只是要注意可能在某些场合使用的另一种选择:

答案是使用鲜为人知的#strings函数来替换&#39; +&#39;用&#39; &#39;

在链接文字中,使用

th:text="${#strings.replace(category.key,'+',' ')}"