当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf:将参数添加到当前url

仇炜
2023-03-14

我在

http://example.com/some/page?p1=11

我想在不重新定义的情况下向当前url添加一个参数

http://example.com/some/page?p1=11&p2=32

用类似的东西:

<a th:href="@{?(p2=32)}">Click here</a>

但是上面的代码返回 http://example.com/some/page?

如何使用Thymeleaf进行此操作?


共有3个答案

党星鹏
2023-03-14
th:href="@{/your/link?parameter=__${appendParameter}__}"
谢承
2023-03-14

最简单的解决方案是连接“Request estURI”和“queryString”。以下是示例:

<div th:with="currentUrl=(${#httpServletRequest.requestURI + '?' + #strings.defaultString(#httpServletRequest.queryString, '')})">
   <a th:href="@{${currentUrl}(myparam=test)}">click here</a>
</div>

“http://localhost:8080/some-page?param1=1”的结果:

 http://localhost:8080/some-page?param1=1&myparam=test

“http://localhost:8080/some-page”的结果:< br >

 http://localhost:8080/some-page?&myparam=test

缺点:
Thymeleaf不会覆盖参数-只会将参数添加到URL。因此,如果用户再次单击该URL,结果将是:

http://localhost:8080/some-page?param1=1&myparam=test&myparam=test

参考文献:
http://forum.thymeleaf.org/How-to-link-to-current-page-and-exchange-parameter-td4024870.html

编辑:

这是一些解决方法,它从URL中删除参数“myparam”:

<div th:with="currentUrl=(${@currentUrlWithoutParam.apply('myparam')})">
    <a th:href="@{${currentUrl}(myparam=test)}">click here</a>
</div>

Spring配置中的下一个:

@Bean
public Function<String, String> currentUrlWithoutParam() {
    return param ->   ServletUriComponentsBuilder.fromCurrentRequest().replaceQueryParam(param).toUriString();
}

对于更“全局”的解决方案,我会尝试为属性“th: href”扩展处理器或创建我自己的属性。我不是胸片专家,只是面临类似的问题。

时同
2023-03-14
匿名用户

您可以使用 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 类型。
  • 工厂方法从CurrentRequest创建的实例将保存到urlBuilder变量中。
  • 在查询字符串中添加参数或通过 replaceQueryParam 方法替换参数,然后生成 URL。

优点:

  • 安全的解决方案。
  • 无尾随 在查询字符串为空的情况下。
  • 在Spring背景下没有多余的豆子。

缺点:

  • 相当冗长。

!请注意,上面的解决方案会创建生成器的一个实例。这意味着生成器不能重复使用,因为它仍然会修改原始 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

 类似资料:
  • 本文向大家介绍javascritp添加url参数将参数加入到url中,包括了javascritp添加url参数将参数加入到url中的使用技巧和注意事项,需要的朋友参考一下 将对象参数加入到url中,如果原来url中有则覆盖 js代码

  • 其背后的思想是遵循在tomcat中部署为war文件的过程,正如我在本链接中所问的:如何在不在application.properties中设置的情况下获得controller中的上下文路径 所以问题是:是否可以在@GetMapping中添加一些param来添加contextPath 更新1 http://localhost:8080/webapp2/dashboard/admin/list/par

  • 问题内容: 是否可以在向其添加一些参数数据的同时将请求转发给另一个控制器?我尝试添加到ModelMap中,但是它似乎不存在问题。我正在做类似的事情: 我能想到的唯一其他方法是将参数放在会话上,然后将其弹出目标控制器。 问题答案: 最简单的方法是将数据添加到请求中。 由于这是转发,因此将相同的请求传递到服务器内的不同处理程序。 作为示例,让我们从两个控制器的简单设置开始,一个转发到另一个: 添加数据

  • 我使用下面的代码将活动类添加到菜单项。该网站是99%使用WooCommerce的Ecomm,我使用产品类别作为顶级导航项目。下面的代码适用于几乎所有项目,除非在产品子类别上处于活动状态。 本质上,我希望顶层导航项被标记为活动类,即使选择了子类别。

  • 问题内容: 很简单,我无法弄清楚如何将文本框中的整数(即+)添加到SQL字段中的整数。 因此,例如,SQL字段中可能有“ 10”,而文本框中可能有“ 5”。我想将这些数字加在一起以存储“ 15”,而不必下载SQL表。 包含要添加到SQL整数的整数的文本框为,SQL表中的SQL列为@ugpoints。请注意,如果没有’+’-在下面的代码中,并且确实是错误的- 将的值毫无问题地添加到表中,但是它只是替

  • 问题内容: 假设给了我一个URL。 它可能已经具有GET参数(例如),也可能没有(例如)。 现在我需要向其中添加一些参数。在第一种情况下,我将拥有,而在第二种情况下- 。 有什么标准的方法可以做到这一点吗? 问题答案: 和模块有一些怪癖。这是一个工作示例: ,结果,是只读的,我们需要把它转换成之前,我们可以尝试修改其数据。