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

如何将两个对象从thymeleaf窗体传递到Spring控制器?

江志业
2023-03-14

我想将两个对象从thymeleaf表单传递到控制器。这是我的ThymileAF代码:

<!DOCTYPE html>
<html lang='en' xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="ISO-8859-1"/>
<title>Payment Page</title>
</head>
<body>
<h1>Payment List</h1>

<table>
<tr>
 <th>StuId</th>
 <th>Month</th>
 <th>Amount</th>
 
</tr>
<tr th:each="payment:${student.payments}">
<td th:text="${student.id}">2</td>
<td th:text="${payment.month}">devesh</td>
<td th:text="${payment.amount}">23</td>
</tr>
</table>

<h3>Add a Payment</h3>
 <form action="#" th:action= "@{/payments}" th:object="${payment}" method="POST"> 
      <div th:object="${student}" >
 <label for="name">Month:</label>
   <input type="text" name="month" size="50"></input><br/> 
 <label for="amount">Amount:</label> 
   <input type="text" name="amount" size="50"></input><br/>
<input type = "submit"/></form>

</body>
</html>

在表单中,除了这里实际提交的付款对象之外,我想将学生对象或id传递给我的控制器,因为任何付款都应该对应于特定的学生。我找了很多,直到现在才找到办法。

PaymentController方法,我希望在其中传递对象,因为我使用提交表单,所以无法在th:action中传递变量

@RequestMapping(method = RequestMethod.POST, value = "/{id}/payments")
    public String doPayment(@ModelAttribute("payment") PaymentRecord paymentRecord, @PathVariable int id) {
        Student st = studentService.getStudentInfo(id);
        
        st.addPayments(paymentRecord);
        System.out.println("entered into do payment");
    

        
        
            studentService.addStudent(st);
      
        
        paymentService.doPayment(paymentRecord);
        return "redirect:{id}/payments";
    }

请建议。我被困在这里了

共有2个答案

鲁涵意
2023-03-14

而不是:

return "redirect:{id}/payments";

试试这个:

return "redirect:" + id + "/payments";

或者(如果需要引导/在重定向中):

return "redirect:/" + id + "/payments";

当然,如果您想“获取”多个OBJ,则可以执行以下操作:

 @RequestMapping(value = { "/deleteuserdocument/{docid}/{userid}" }, method = RequestMethod.GET)

这来自我的github repo,我在那里“获取”特定用户ID的documentid。希望这能有所帮助。

容宏逸
2023-03-14

你可以用不同的方法。

但首先,让我们将post方法注释缩短为:

@刚需映射(方法=刚需方法。POST, value="/{id}/付款")

@PostMapping(“/{id}/payments”)

我还将变量id更改为studentId,以便下一个阅读代码的人更清楚地了解它。

现在,将变量作为隐藏输入类型包含在表单标记中:

<代码>

那你也可以

a)添加一个String学生ID属性到你的PaymentRecords类。然后在post方法中,可以调用paymentRecord.getStuentId()

b) 将studentId的请求参数添加到使用@PostMapping映射的方法中。因此,您的方法签名可以具有@RequestParam(String studentId)。在这种情况下,studentId的值将完全公开给用户

c) 使用@RequestBody并将值映射到bean。你可以进一步阅读这个话题,看看这个问题的背景。

 类似资料:
  • 我的问题是: 在FooController中: 假设我有一个带有“status”变量的另一个对象栏。如何传递该对象,以便在相同的表单中提交输入? 如: 已经谢谢了。

  • 如果对象为NULL,则无法传递对象项目。如何将对象从HTML传递给spring控制器?

  • 我正在尝试将对象从AJAX传递给Spring控制器。我基本上尝试了我在SO和大量其他在线资源上遇到的所有解决方案,但都无济于事。我不知道我做错了什么,所以我寻求您的帮助。我正在开发一个简单的网络商店,此时我想做的就是将登录值(用户名和密码)从html文件上的模态表单传递给控制器。这是我的代码:LoginCredentials.java 指数html(删除大部分引导的html部分) 我ndex.ht

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

  • 我的控制器代码: 但不管用。

  • 我有使用Springboot和Thymeleaf模板编写的简单Web应用程序。报告控制器从表单接收数据并构建TestPlanReportReportACK对象,该对象作为模型属性添加如下: 我可以在“图表”thymeleaf模板中使用该数据并显示我需要的数据,但我需要在单击按钮时将完全相同的对象发送回控制器,但我得到TestPlanReportACK对象作为设置空值的参数。 以下是我的按钮在图表模