【问题标题】:How to replace URL parameters in a thymeleaf link?如何替换 thymeleaf 链接中的 URL 参数?
【发布时间】:2018-01-17 13:17:02
【问题描述】:

我有一个带有获取参数的现有 URL。单击按钮时,我想更改一个特定的 URL 参数,但保留其他参数。这可能吗?

Thymeleaf 模板:

<a th:href="@{/order/details(id=3)}">

结果:

<a href="/order/details?id=3">

如果我想怎么办

  • 在 URL 中保留其他参数
  • 覆盖id参数?

上述百里香模板的期望结果:

localhost:8080/order/details?name=test&id=3

最好没有javascript。

【问题讨论】:

  • “点击按钮”是什么意思?将请求发送到服务器?还是只是想直接更改链接中的参数?
  • 两者。我有一个
    `,因此单击 url 会更改(自动)并调用后端服务 url。
  • 所以,应该使用 JS 来完成。不是百里香
  • 请看这个answer。它应该符合您的需求。

标签: java spring thymeleaf


【解决方案1】:

即使这是一个较老的问题,我希望这仍然可以帮助:

<a th:href="@{${urlBuilder.replaceQueryParam('id', 3).build().toUriString()}}" th:with="urlBuilder=${T(org.springframework.web.servlet.support.ServletUriComponentsBuilder).fromCurrentRequest()}">

这将构建一个完整的 URI 字符串,包括 HTTP(S) 部分。因此,如果您(例如)为您的 Web 应用程序使用负载均衡器并且它不直接转发 https 请求,您将得到一个错误的 URI 字符串。在这种情况下,您必须像Zico 写道:在控制器中设置baseUrl 并将其绑定到模板。 您还可以从当前请求中获取查询字符串:request.getQueryString() 或在控制器中使用 ServletUriComponentsBuilder 类。


编辑

您可以将.scheme('https') 申请到urlBuilder (@{${urlBuilder.replaceQueryParam('id', 3).scheme('https').build().toUriString()}})。例如。您可以在控制器中创建一个方法,从负载均衡器获取X-Forwarded-Proto

从这里查看示例 #27:https://www.programcreek.com/java-api-examples/?api=org.springframework.web.servlet.support.ServletUriComponentsBuilder

【讨论】:

    【解决方案2】:

    从控制器设置 baseURL,然后将 baseURL 绑定到模板

    在控制器中:

    @RequestMapping(value = "/test", method = RequestMethod.GET)
      public String home(ModelMap model, HttpServletRequest req) {
      String baseUrl = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
      ....
      model.addAttribute("baseUrl", baseUrl);
      model.addAttribute("name", name);
      .....
    

    在模板中:

    <a th:href="@{__${baseUrl}__/order/details(name=${name},id=3)}">
    

    【讨论】:

    • 当然我想保留任何现有的查询参数。随意覆盖它们。
    • 嗯,正如最初的问题中所写:“在 URL 中保留其他参数”
    • 抱歉我错过了
    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 2011-10-17
    • 2010-09-07
    • 2012-05-07
    • 2011-07-31
    相关资源
    最近更新 更多