有些东西阻止我在HTML表单中使用Thymeleaf和HTML设置路径变量。我想简单地在表单中输入33并获得localhost:8080/blog/33作为URL,但我只能获得查询字符串或格式错误的括号等。
一些示例尝试和结果:
@{/blog/{id}(id =${id})}
localhost:8080/blog/?ID = 33
@{/blog/+${id}}
localhost:8080/blog/+%20$%7Bid%7D?ID = 33
我想要的是
localhost:8080/blog/33
此表单的完整代码如下:
<!DOCTYPE HTML>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<title>Form Submission</title>
<style>
button{
margin-top:20px;
width: 250px;
}
</style>
</head>
<body>
<h2>Delete Entry</h2>
<form action="#" th:action="@{/blog/{id}(id = ${id})}" th:object="${blog}" method="get" >
<fieldset>
<p>Delete ID: <input type="text" th:field="*{id}" required /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</fieldset>
</form>
<button onclick="window.location.href = '/'">Menu</button>
</body>
</html>
2条答案
按热度按时间tjrkku2a1#
此语法正确:
@{/blog/{id}(id = ${id})}
。你得到
localhost:8080/blog/?id=33
的原因可能是因为在表单创建时${id}
是空的,当你点击提交按钮时,它将?id=33
添加到url中(因为方法是get
,你有一个相同的name="id"
输入:<input type="text" th:field="*{id}" required />
。没有html/thymeleaf方法(没有JavaScript)可以将表单字段放入URL的路径部分(如果这是您所期望的)。如果你想这样做,你必须使用一个JavaScript库。
5gfr0r5j2#
我也有同样的问题,但我对这应该如何工作有一个误解。所以对于每个仍在为此而奋斗的人来说,这里有另一个描述。也许会有帮助
我喜欢在浏览器中看到的是:
Spring模型中的预设:
jobid=16
、ts.id=57
、js.id=3
所以我做的是:
这导致浏览器中的以下输出(错误):
但如果我做了以下事情
这导致浏览器中的输出(工作,但不像它应该的那样):
现在我可以确定值在后端设置正确。但是为什么他们没有正确地打印出来呢?
正确的方法是:
或者说得更明白些
所以关键是,这个表达式
@{jobendpoint/deletestatistics/{jobid}/{ts.id}...
的第一部分中的路径变量是thymeleaf的一些局部变量,当然局部变量必须被设置/初始化。这发生在支架部分(jobid=${jobid}**, ...)
中。Spring-Boot模型变量只在括号部分可见,所以我必须“复制/重新初始化”它们,使它们在表达式本身中也可用。
希望这能帮助到其他人...