多个对象的pojo类在一个html表单spring mvc



我正在与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 );
        }
}

最新更新