How to Insert multiple rows from web form into database using java spring framework

后端 未结 1 2000
独厮守ぢ
独厮守ぢ 2021-01-03 13:02

I am new to Java Spring Framework and I have a requirement in my new project.

Using the Spring framework, I have a POJO class with set and get methods. I also have i

相关标签:
1条回答
  • 2021-01-03 13:30

    I would achieve that by having another POJO serving as a container with a list of your POJOs inside.

    This would look like this :

    public class PojoForm {
        private List<Pojo> pojos;
        public List<Pojo> getPojos() {
            return pojos;
        }
        public void setPojos(List<Pojo> pojos) {
            this.pojos = pojos;
        }
    }
    

    Then in the controller, use this container instead of the actual pojo as a model attribute.

    @ModelAttribute("pojoForm")
    public PojoForm populatePojos() {
        // Don't forget to initialize the pojos list or else it won't work
        PojoForm pojoForm = new PojoForm();
        List<Pojo> pojos = new ArrayList<Pojo>();
        for(int i=0; i<2; i++) {
            pojos.add(new Pojo());
        }
        pojoForm.setPojos(pojos);
        return pojoForm;
    }
    
    @RequestMapping(method=RequestMethod.POST)
    public String saveForm(@ModelAttribute("pojoForm") PojoForm pojoForm) {
        for(Pojo pojo : pojoForm.getPojos()) {
           service.save(pojo);
        }
        return "theview.jsp";
    }
    

    Then the view should look something like this :

    <form:form commandName="pojoForm" method="POST">
        <!-- Pojo 1 -->
        <form:input path="pojos[0].a" />
        <form:input path="pojos[0].b" />
        <form:input path="pojos[0].c" />
        <!-- Pojo 2 -->
        <form:input path="pojos[1].a" />
        <form:input path="pojos[1].b" />
        <form:input path="pojos[1].c" />
    </form:form>
    

    a, b and c being the properties of the Pojo class.

    You can also directly loop on the list like this :

    <form:form commandName="pojoForm" method="POST">
        <c:forEach items="${pojoForm.pojos}" varStatus="i">
            <form:input path="pojos[${i.index}].a" />
            <form:input path="pojos[${i.index}].b" />
            <form:input path="pojos[${i.index}].c" />
        </c:forEach>
    </form:form>
    
    0 讨论(0)
提交回复
热议问题