Spring boot 在Thymeleaf中使用表单创建URL
我不熟悉Thymeleaf,我对使用表单动态创建URL有一个问题 我有一个简单的spring boot应用程序,它将对象存储在数据库中,我可以使用简单的URL查询数据库。例如,url/distance/0.3将返回距离属性小于或等于0.3的对象。当我在浏览器中编辑这些URL时,它们可以完美地工作 我希望用户能够自己设置这些搜索值。我试图创建一个简单的表单,用用户输入创建上面的url,但出现以下错误:Spring boot 在Thymeleaf中使用表单创建URL,spring-boot,url,thymeleaf,Spring Boot,Url,Thymeleaf,我不熟悉Thymeleaf,我对使用表单动态创建URL有一个问题 我有一个简单的spring boot应用程序,它将对象存储在数据库中,我可以使用简单的URL查询数据库。例如,url/distance/0.3将返回距离属性小于或等于0.3的对象。当我在浏览器中编辑这些URL时,它们可以完美地工作 我希望用户能够自己设置这些搜索值。我试图创建一个简单的表单,用用户输入创建上面的url,但出现以下错误: Neither BindingResult nor plain target objec
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>
在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给出的以下答案,我决定使用控制器来完成这项工作,创建了一个带有必填字段的“forms”对象,并按如下方式编辑了我的代码:
<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;
}
`
距离:
@后映射(“/distance/search”)
公共字符串userGetClose(@ModelAttribute(“param”)表单){
字符串距离=String.valueOf(form.getDist());
返回“重定向:/distance/”+距离;
}
理想情况下,我希望直接从html页面创建并调用url,以避免返回控制器仅仅创建url,但这很好 您必须在控制器中使用
ModelMap
或Model
,然后使用addAttribute
设置dist
:
public String controllerMethod(@RequestParam("dist") String dist,
Model model){
model.addAttribute("dist", dist);
return "viewName";
}
或者Thymeleaf提供上下文对象,以直接在HTML中获取查询参数,如${param.dist}
更新:
刚才看到控制器中有一个
重定向:
。因此,dist
在请求参数中不再可用,因此,${param.dist}
将无法工作。更简单的解决方案是使用ModelMap
并将dist
作为视图模型的一部分。谢谢您的回答。直接在html文件中这样做是我的首选解决方案,但当我这样做时:`距离:距离:距离:我仍然得到错误我得到的错误是:bean name“param”的BindingResult和普通目标对象都不能作为请求属性提供。u应该能够在param对象中获取查询参数。
public String controllerMethod(@RequestParam("dist") String dist,
Model model){
model.addAttribute("dist", dist);
return "viewName";
}