【问题标题】:Spring boot add multiple rowsspring boot 添加多行
【发布时间】:2019-10-18 12:12:36
【问题描述】:

我正在尝试在数据库中保存多条记录,但无法保存。我一次只能保存 1 行。我已经按照下面的链接示例进行了操作。但仍然出现错误:

Spring mvc add multiple rows

Controller.java

这是我的控制器类:

   @PostMapping("/saveCREfforts")
    public String saveCREfforts(@ModelAttribute("creffortdetailsForm") CREffortDetailsListForm cREffortDetailsListForm,, Model model, BindingResult bindingResult) {


        for(CREffortDetails crEfforts : cREffortDetailsListForm.getcREffortDetails()) {
            System.out.println(" crEffortr.getCrNumber   :::: :  "+crEfforts.getCrNumber());

            cREffortsDetailsService.save(crEfforts); 
         }



        return "AddCREfforts";
    }

JSP

这是 JSP 页面。

我在 Spring Boot 中使用了 <form:form> 标签。

  <form:select name="task"  style="width:100%;" path="CREffortDetails[0].task" value="task">

    <form:option value="Documentation Creation / Updation"  >Documentation Creation / Updation</form:option>
    <form:option value="Design and development">Design and development</form:option>
    <form:option value="Build">Build</form:option>
    <form:option value="Deployment to lower environments (AM2/AM3/QA/TSTB)">Deployment to lower environments (AM2/AM3/QA/TSTB)</form:option>
    <form:option value="Unit Testing">Unit Testing</form:option>
    <form:option value="System Testing">System Testing</form:option>
    <form:option value="Unit Testing">Unit Testing</form:option>
    <form:option value="Review Efforts">Review Efforts</form:option>
    <form:option value="UAT Testing Support">UAT Testing Support</form:option>
    <form:option value="Deployment to Production">Deployment to Production</form:option>
  </form:select>          
</td>
<td>
   <form:select name="weekNumber"  style="width:100%;" path="CREffortDetails[0].weekNumber" value="weekNumber">
    <form:option value="WK39">WK39</form:option>
    <form:option value="WK40">WK40</form:option>
    <form:option value="WK41">WK41</form:option>
    <form:option value="WK42">WK42</form:option>
    <form:option value="WK43">WK43</form:option>
    <form:option value="WK44">WK44</form:option>
  </form:select>
            </td>

            <td>
            <form:input path="CREffortDetails[0].plannedHours"  value="" style="width:100%;"  />

            </td>
            <td>
            <form:input path="CREffortDetails[0].actualHours" value="" style="width:100%;" />

            </td>

         <form:input type="hidden" path="CREffortDetails[0].crNumber" style="width:100%;" />

        </tr>

         <tr>

            <td>

  <form:select name="task"  style="width:100%;" path="CREffortDetails[1].task" value="task">

    <form:option value="Documentation Creation / Updation"  >Documentation Creation / Updation</form:option>
    <form:option value="Design and development">Design and development</form:option>
    <form:option value="Build">Build</form:option>
    <form:option value="Deployment to lower environments (AM2/AM3/QA/TSTB)">Deployment to lower environments (AM2/AM3/QA/TSTB)</form:option>
    <form:option value="Unit Testing">Unit Testing</form:option>
    <form:option value="System Testing">System Testing</form:option>
    <form:option value="Unit Testing">Unit Testing</form:option>
    <form:option value="Review Efforts">Review Efforts</form:option>
    <form:option value="UAT Testing Support">UAT Testing Support</form:option>
    <form:option value="Deployment to Production">Deployment to Production</form:option>
  </form:select>          
</td>
<td>
   <form:select name="weekNumber"  style="width:100%;" path="CREffortDetails[1].weekNumber" value="weekNumber">
    <form:option value="WK39">WK39</form:option>
    <form:option value="WK40">WK40</form:option>
    <form:option value="WK41">WK41</form:option>
    <form:option value="WK42">WK42</form:option>
    <form:option value="WK43">WK43</form:option>
    <form:option value="WK44">WK44</form:option>
  </form:select>
            </td>

            <td>
            <form:input path="CREffortDetails[1].plannedHours"  value="" style="width:100%;"  />

            </td>
            <td>
            <form:input path="CREffortDetails[1].actualHours" value="" style="width:100%;" />

            </td>

         <form:input type="hidden" path="CREffortDetails[1].crNumber" style="width:100%;" />

        </tr>

        </table>



<div align="center">
<table  align="right">
<tr>
<!-- <input type="submit" value="SAVE" /> -->
 <button class="button"><span>SAVE</button>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
<button class="button"><span>CLEAR</button>
</tr>
</table>
<br><br>

</form:form>

Bean 类

这是实体类。我们正在尝试通过 JPA 将表单数据存储到数据库中。

@Entity
@Table(name = "CREFFORTFORM")
public class CREffortDetails {

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     private String crNumber;
     private String description;
     private String task;
     private String weekNumber;
     private String plannedHours;
     private String actualHours;
     private String totalPlannedHours;
     private String totalActualHours;

        @ManyToMany(mappedBy = "creffortdetails")
        private Set<CRDataForm> crdataform;


    public Set<CRDataForm> getCrdataform() {
            return crdataform;
        }
        public void setCrdataform(Set<CRDataForm> crdataform) {
            this.crdataform = crdataform;
        }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCrNumber() {
        return crNumber;
    }

带有列表的Bean类表单:

这是一个用于迭代多行记录的列表形式。

public class CREffortDetailsListForm {

    private List<CREffortDetails> cREffortDetails;


    public List<CREffortDetails> getcREffortDetails() {
        return cREffortDetails;
    }

    public void setcREffortDetails(List<CREffortDetails> cREffortDetails) {
        this.cREffortDetails = cREffortDetails;
    }



}`

我在加载页面时遇到以下 JSP 错误。

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Fri Oct 18 17:46:57 IST 2019
There was an unexpected error (type=Internal Server Error, status=500).
Invalid property 'CREffortDetails[0]' of bean class [com.demandTracker.auth.model.CREffortDetails]: Bean property 'CREffortDetails[0]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
org.springframework.beans.NotReadablePropertyException: Invalid property 'CREffortDetails[0]' of bean class [com.demandTracker.auth.model.CREffortDetails]: Bean property 'CREffortDetails[0]' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    at 

【问题讨论】:

  • 如何在页面上设置 CREffortDetails?当您加载页面时,您是否为它传递了一个 CREffortDetails 数组?或者您加载了一个可以提供 CREffortDetails 列表的 CREffortDetailsListForm?
  • 嗨,我们认为 CREffortDetails 数组值将在 jsp 页面上设置。我们不确定如何设置值,因此请求帮助。请您对此提出建议。我需要创建虚拟模型属性对象来设置数组值吗?
  • @JulianoPacheco 你能帮忙吗
  • 你能发布你的控制器代码来加载你的jsp页面吗?我猜这个问题发生在此时,因为CREffortDetails被识别但不像一个数组。也许您需要在加载时设置 CREffortDetails 对象列表,并在您的 jsp 页面中将 CREffortDetails[x] 更改为将添加到此列表中的对象。

标签: java spring spring-boot jsp spring-data-jpa


【解决方案1】:

请提供来自 cREffortsDetailsS​​ervice 的代码。

如果您使用的是 SpringDataJpa,我认为您可能是因为您在问题中添加了该标签,您应该能够使用 &lt;S extends T&gt; List&lt;S&gt; saveAll(Iterable&lt;S&gt; entities); 方法而不是使用 &lt;S extends T&gt; S save(S entity); 方法一次保存一个。

如果您想使用休眠批量插入来调整性能,您将需要查看调整此属性:

spring:
  jpa:
    properties:
      hibernate.jdbc.batch_size: 15

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 2017-10-11
    • 1970-01-01
    • 2017-01-30
    • 2012-06-08
    • 2023-02-22
    • 2019-11-14
    • 2017-09-10
    • 2020-09-08
    相关资源
    最近更新 更多