您可以使用 URI 生成器,直接从 Thymeleaf。
<span th:with="urlBuilder=${T(org.springframework.web.servlet.support.ServletUriComponentsBuilder).fromCurrentRequest()}"
th:text="${urlBuilder.replaceQueryParam('p2', '32').toUriString()}">
</span>
对于打印输出的 URL:http://example.com/some/page?p1=11
http://example.com/some/page?p1=11&p2=32
解释:
- SpEL
T
运算符用于访问类型。ServletUriComponentsBuilder
- 由工厂方法创建的实例将保存到变量中。
fromCurrentRequest
urlBuilder
- 通过方法在查询字符串中添加或替换参数,然后生成 URL。
replaceQueryParam
优点:
- 安全的解决方案。
- 在查询字符串为空的情况下没有尾随。
?
- 在春季背景下没有多余的豆子。
缺点:
!请注意,上面的解决方案会创建生成器的一个实例。这意味着生成器不能重复使用,因为它仍然会修改原始 URL。对于页面上的多个URL,您必须创建多个构建器,如下所示:
<span th:with="urlBuilder=${T(org.springframework.web.servlet.support.ServletUriComponentsBuilder)}">
<span th:text="${urlBuilder.fromCurrentRequest().replaceQueryParam('p2', 'whatever').toUriString()}"></span>
<span th:text="${urlBuilder.fromCurrentRequest().replaceQueryParam('p3', 'whatever').toUriString()}"></span>
<span th:text="${urlBuilder.fromCurrentRequest().replaceQueryParam('p4', 'whatever').toUriString()}"></span>
</span>
对于打印:http://example.com/some/page
http://example.com/some/page?p2=whatever
http://example.com/some/page?p3=whatever
http://example.com/some/page?p4=whatever