我正在与Spring一起工作,我的表单字段与属性字段相同,所以当我提交表单时,它直接映射到数据库字段并保存数据,它可以完美地工作,但是如果我想保存多个对象与一个表单,
HTML:<form>
Payment:<br>
<input type="text" name="payment"><br>
Date:<br>
<input type="date" name="paymentDate">
</form>
POJO: public class ProjectPayment
{
private Double payment;
private Date paymentDate;
// setters and getters
}
控制器:
@RequestMapping(value = "/addnewproject", method = RequestMethod.POST)
public @ResponseBody String SaveProject(ProjectPayment projectPayment) {
projectPaymentService.saveProjectPayment( projectPayment);
}
这是完美的,但现在在我的一些场景中,我需要动态地多个对象然后如何在数据库中保存,控制器应该是什么样子
例如:现在我的表单是<form>
Payment:<br>
<input type="text" name="payment"><br>
Date:<br>
<input type="date" name="paymentDate">
Payment:<br>
<input type="text" name="payment"><br>
Date:<br>
<input type="date" name="paymentDate">
Payment:<br>
<input type="text" name="payment"><br>
Date:<br>
<input type="date" name="paymentDate">
Payment:<br>
<input type="text" name="payment"><br>
Date:<br>
<input type="date" name="paymentDate">
</form>
现在这个表单有ProjectPayment类的多个对象,但它只保存一个对象请告诉我我的控制器应该是什么样子,我已经这样做了但是它发生了异常
控制器:
@RequestMapping(value = "/addnewproject", method = RequestMethod.POST)
public @ResponseBody String SaveProject(ProjectPayment[] projectPayment) {
for(ProjectPayment propay : projectPayment)
{
projectPaymentService.saveProjectPayment( propay );
}
}
我可以理解您想要从网格/表发布数据,但是确定哪个字段映射到哪个对象太模糊了。例子:
- field1
- field2
- field3 ==>映射到索引1或2的对象?
- filed1
所以你认为field3应该映射到数组index=1或index=2?所以我建议你们一个一个的提交来解决这个问题。
解决这个问题的简单方法是创建一个ViewModel。
。
public class ProjectPaymentViewModel
{
private List<ProjectPayment> listProjectPayment;
// setters and getters
}
在网页和控制器上使用这个视图模型
<form>
Payment:<br>
<input type="text" name="listProjectPayment[0].payment"><br>
Date:<br>
<input type="date" name="listProjectPayment[0].paymentDate">
Payment:<br>
<input type="text" name="listProjectPayment[1].payment"><br>
Date:<br>
<input type="date" name="listProjectPayment[1].paymentDate">
Payment:<br>
</form>
控制器上@RequestMapping(value = "/addnewproject", method = RequestMethod.POST)
public @ResponseBody String SaveProject(ProjectPaymentViewModel projectPaymentViewModel) {
for(ProjectPayment propay : projectPaymentViewModel.getListProjectPayment())
{
projectPaymentService.saveProjectPayment( propay );
}
}