当前位置: 首页 > 知识库问答 >
问题:

在Thymeleaf中使用表单创建URL

司徒云
2023-03-14

我不熟悉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>

试着从这场讨论中找到各种答案,但运气不好。

我也尝试使用控制器,如这里所建议的,在控制器中:

@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给出的以下答案,我决定使用控制器来完成这项工作,创建了一个带有必填字段的“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;
 }

理想情况下,我希望直接从html页面创建并调用url,以避免返回控制器仅仅创建url,但这很好。

共有1个答案

应涵容
2023-03-14

您必须在控制器中使用ModelMapModel,然后使用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作为视图模型的一部分。

 类似资料:
  • 类MedicalJournalEntry: 类别血压: 我使用片段创建了一个表单。它对“普通”字段非常有效,但是自从我添加了嵌套对象字段后,Thymeleaf甚至不能再创建保存表单的视图了。当我想要显示窗体时,我总是得到以下错误: 以及引发问题的片段对应内容: 这是我的控制器。它只返回包含新MedicalJournalEntry的输入数据表单的视图:

  • 我想知道,列表是如何在Spring绑定的……以及如何在Thymeleaf中访问它们。无论有没有包装类,如何通过表单将单个/多个对象添加到ArrayList或普通数组中。。 我非常感谢你的解释。 这就是我尝试过的:形式 包装器类 型号: 控制器 Edit1:现在它使用包装类并使用静态索引…没有包装类,我该如何实现这一点,我读了很多关于EL表达式${var.index},但这是如何工作的?我应该如何使

  • 错误500 JDK 1.8 Tomcat 8.0.38 HTTP状态500-处理JSP页面/index1时发生异常。11号线 类型异常报告 消息处理JSP页面/index1时发生异常。11号线 说明服务器遇到内部错误,无法满足此请求。 index1。jsp 通用域名格式。快乐的心情。业主立案法团。豆小豆。JAVA RegisterAndLoginController。JAVA web.xml WE

  • 本文章将介绍Thymeleaf中实现表单的语法和概念。 编辑源代码以便将产品列表中的某个数据。已经将类的对象列表设置为具有变量名称的上下文模型(参考:中的实现)。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项目的过程,这里将只介绍如何使用 Spring表达式和标签。 这里创建一个Maven Web项目: thymeleaf-tutorials ,其目

  • 问题内容: 我正在IntelliJ IDEA 9中用一个按钮创建一个简单的GUI表单。用该表单创建的类不是JFrame或任何其他swing类。如何在源代码中调用表单? 问题答案: 只需进入与您的表单关联的类,按+ 并选择“ Form main()”即可。 资源: GUI设计器基础

  • 基于活动记录(ActiveRecord)的表单:ActiveForm 在yii中使用表单的主要方式是通过 yii\widgets\ActiveForm。 当某个表单是基于一个模型时,应该首选这种方式。 此外,在 yii\helpers\Html 中有很多实用的方法为表单添加按钮和帮助文档。 在客户端显示的表单,大多数情况下都有一个相应的模型, 用来在服务器上验证其输入的数据(可在输入验证一节获取关