我有一个带get参数的现有网址。单击按钮,我想更改一个特定的URL参数,但保留其他参数。这可能吗?
Thymeleaf模板:
<a th:href="@{/order/details(id=3)}">
结果:
<a href="/order/details?id=3">
如果我想
怎么办?id
参数?上述百里叶模板的预期结果:
localhost:8080/order/details?name=test&id=3
最好没有javascript。
答案 0 :(得分:1)
尽管这是一个比较老的问题,但我希望这仍然可以:
<a th:href="@{${urlBuilder.replaceQueryParam('id', 3).build().toUriString()}}" th:with="urlBuilder=${T(org.springframework.web.servlet.support.ServletUriComponentsBuilder).fromCurrentRequest()}">
这将构建完整的URI字符串,包括HTTP(S)部分。因此,如果您为网络应用程序使用(例如)负载平衡器,并且它不直接转发https请求,则会收到错误的URI字符串。在这种情况下,您必须像Zico这样写:设置控制器中的baseUrl并将其绑定到模板。
您还可以从当前请求中获取查询字符串:request.getQueryString()
或在控制器中使用ServletUriComponentsBuilder
类。
修改
您可以将.scheme('https')
应用于urlBuilder
(@{${urlBuilder.replaceQueryParam('id', 3).scheme('https').build().toUriString()}}
)。例如。您可以在控制器中创建一个从负载均衡器获取X-Forwarded-Proto
的方法。
答案 1 :(得分:0)
从控制器设置baseURL,然后将baseURL绑定到模板
在控制器中:
{
"id": 1,
"title": "Algebra",
"description": "Do you know your y times table?",
"subject_id": 1,
"lessons": [
{
"id": 1,
"title": "Functions",
"description": "A mapping of inputs to outputs",
"position": 2,
"course_id": 1,
"activities": [
{
"id": 1,
"title": "Activity 1"
"task":
{
"id": 1,
"name": "Task name here"
}
}
]
}
]
}
在模板中:
@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);
.....