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

将数据从Thymeleaf模板传递到springboot控制器

印子平
2023-03-14

我有使用Springboot和Thymeleaf模板编写的简单Web应用程序。报告控制器从表单接收数据并构建TestPlanReportReportACK对象,该对象作为模型属性添加如下:

@PostMapping("/report")
public String homeSubmit(@ModelAttribute HomeFormInput homeFormInput, Model model, Errors errors) {
    final TestPlanReportResponse response = new TestPlanReportResponse(homeFormInput);
    model.addAttribute("allData", response);
    return "charts";
}

我可以在“图表”thymeleaf模板中使用该数据并显示我需要的数据,但我需要在单击按钮时将完全相同的对象发送回控制器,但我得到TestPlanReportACK对象作为设置空值的参数。

@PostMapping("/report/send")
public String sendReport(@ModelAttribute TestPlanReportResponse reportData, Model model) {
    //reportData contains just nulls
}

以下是我的按钮在图表模板中的设置方式:

<form action="#" th:action="@{/report/send}" th:object="${allData}" method="post">
        <button type="submit">Send the report</button>
</form>

所以我的问题是如何从thymeleaf模板发回对象?我是否应该创建一个隐藏的输入并将“allData”对象放在那里以将其发送回去?对我来说,这就像肮脏的黑客。返回数据的合适方式是什么?我想让这个应用程序无状态,所以不要将数据存储在服务器端。

共有1个答案

谷森
2023-03-14

当我使用Spring、Thymeleaf和表单时,我们遇到了相同的问题,在表单、模板和不同控制器之间来回传递数据。你的建议就是我们所做的,我们使用了隐藏的输入,尽管看起来很脏,这是标准的建议答案,我们没有找到更好的。

您需要创建一个输入,键入一个值并将其链接到一个字段,如下所示:

    <form action="#" th:action="@{/report/send}" th:object="${allData}" method="post">
   <input type="hidden" th:value="*{allDataValue1}" th:field="*{allDataField1}" />
//Do this for all your attributes/values that you wish to pass to the controller
            <button class="btn btn-info btn-lg btn-block" type="submit">Send the report</button>
    </form>

不过,我找到了这个答案,你可以试试看这个帖子

 类似资料:
  • 问题内容: 我的图像是我试图将数据(变量)从一个阶段传递到另一阶段,但是当我尝试在第二阶段访问它们时,它们为空。mainWindow的代码。前往window1 // window1类: 如果我想访问以前收到的标题,则为null 初始化显示应该为“ Window1”时显示为null} 问题答案: 在加载FXML文件的过程中,将调用该方法-换句话说,在调用时将调用该方法。 显然,这是 在 调用 之前

  • 我正在尝试在更改选项后将我的Thymeleaf超文本标记语言中已经提供的List传回控制器。我尝试过隐藏输入,但不幸的是,它还不起作用。 我的表单如下所示(控制器已经提供了“电影”列表) 我的控制器看起来像这样: 期待有人能帮助我!

  • 在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图。控制器类将响应请求来的URL。控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果会发送回浏览器。视图模板可以被控制器用来产生格式化过的HTML从而返回给浏览器。 控制器负责给任何数据或者对象提供一个必需的视图模板,用这个视图模板来Render返回给浏览器的HTML。最佳做法是:一

  • 问题内容: 我是laravel的新手,我一直试图将表’student’的所有记录存储到一个变量,然后将该变量传递给视图,以便可以显示它们。 我有一个控制器-ProfileController,里面有一个函数: 我认为我有此代码 我收到此错误:未定义的变量:学生(View:regprofile.blade.php) 问题答案: 你能试试看吗 同时,您可以设置多个类似这样的变量,

  • 我在建一个拉威尔的网站。我希望提交的表单数据运行查询,并将结果插入表格式。我正在使用oracle DB,并已将其连接到Laravel。另外,我已经创建了表单,查询结果正确。我不能做的是将结果成功地传递到表中。 我的文件如下: > Routes.php(或web.php较新的laravel版本): 搜索。刀身php(带有post方法的表单) 我的控制器(NewController.php)运行查询。

  • 问题内容: 我的应用程序调用了一个返回字典的API。我想将信息从此字典传递给视图中的JavaScript。具体来说,我在JS中使用Google Maps API,因此我希望向其传递包含长/短信息的元组列表。我知道会将这些变量传递给视图,以便可以在HTML中使用它们,但是如何将它们传递给模板中的JavaScript? 问题答案: 将几乎所有Python对象都转换为JavaScript对象的理想方法是