【发布时间】:2020-04-01 08:40:21
【问题描述】:
我是 Thymeleaf 的新手,在使用表单动态创建 URL 时遇到问题。
我有一个简单的 Spring Boot 应用程序,将对象存储在数据库中,我可以使用简单的 url 查询数据库。例如,url /distance/0.3 将返回距离属性小于或等于 0.3 的对象。当我在浏览器中编辑这些 url 时,它们可以完美运行。
我希望用户能够自己设置这些搜索值。我尝试创建一个简单的表单来使用用户输入创建上述 url,但我收到以下错误:
Neither BindingResult nor plain target object for bean name 'dist' available as request attribute
我已经在 html 文档中尝试过:
<form th:action="@{/distance/{pathParam}(pathParam=${dist}}">`
<p>Distance: <input type="text" th:field="*{dist}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
并尝试来自this discussion 的各种答案,但没有运气。
我也尝试按照here 的建议使用控制器,在控制器中使用这个:
@GetMapping("/distance/search/")
public String userSetDistance(@RequestParam("dist") String dist) {
return "redirect:/distance/" + dist;
}
这在 html 文件中:
<form th:action="@{/distance/search/}">
<p>Distance: <input type="text" th:field="*{dist}" /></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
但这也不起作用。
你能帮我解决这个问题吗?这个想法很简单,但我无法得到有效的东西......谢谢!
更新
根据 MohamedSanaulla 的以下回答,我决定使用控制器来执行此操作,创建了一个包含必填字段的“表单”对象,并按如下方式编辑了我的代码:
<form action="#" th:action="@{/distance/search}" th:object="${param}" method="post">`
<p>Distance: <input type="text" th:field="*{dist}"/></p>
<p><input type="submit" value="Submit" /> <input type="reset" value="Reset" /></p>
</form>
@PostMapping("/distance/search")
public String userGetClose(@ModelAttribute ("param") Forms form) {
String distance = String.valueOf(form.getDist());
return "redirect:/distance/" + distance;
}
理想情况下,我想直接从 html 页面创建和调用 url,以避免返回控制器只是为了创建 url,但这工作正常。
【问题讨论】:
标签: spring-boot url thymeleaf