我有一个带有get参数的现有URL。在按钮单击时,我想更改一个特定的URL参数,但保留其他参数。这可能吗?
胸腺叶模板:
<a th:href="@{/order/details(id=3)}">
结果在:
<a href="/order/details?id=3">
如果我想呢
id
参数?上面胸腺叶模板的期望结果:
localhost:8080/order/details?name=test&id=3
最好没有javascript。
尽管这是一个更古老的问题,但我希望这仍然有所帮助:
<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)}">