【问题标题】:Multiple Objects of pojo class in 1 html form spring mvc?1个html表单spring mvc中pojo类的多个对象?
【发布时间】:2016-11-02 07:38:12
【问题描述】:

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

【问题讨论】:

    标签: java html spring forms spring-mvc


    【解决方案1】:

    我可以理解您想从网格/表格中发布数据,但是确定哪个字段映射到哪个对象太模糊了。 示例:

    • 字段1
    • 字段2
    • field3 ==>映射到索引 1 或 2 处的对象?
    • 提交1

    所以你认为 field3 应该映射到数组 index=1 或 index=2? 所以我建议你应该一个一个提交来解决这个问题。

    【讨论】:

    • 在我的场景中,我需要一个表单的多个对象,所以我不能一个一个地保存
    【解决方案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 );
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多