提问者:小点点

如何更换URL参数在胸腺叶链接?


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

胸腺叶模板:

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

结果在:

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

如果我想呢

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

上面胸腺叶模板的期望结果:

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

最好没有javascript。


共2个答案

匿名用户

尽管这是一个更古老的问题,但我希望这仍然有所帮助:

<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类。

编辑

您可以将. schem('https')应用于urlBuilder@{${urlBuilder.replace eQueryParam('id',3).plan('https').build().toUriString()}})。例如。您可以在控制器中创建一个方法,该方法从负载均衡器获取X-Forwarded-Proto

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

匿名用户

从控制器设置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)}">