Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在Thymeleaf中使用表单创建URL_Spring Boot_Url_Thymeleaf - Fatal编程技术网

Spring boot 在Thymeleaf中使用表单创建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

我不熟悉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>
在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";
}