JBT
JBT

Reputation: 73

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

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 intermediate java service and web classes. i have used the <form> tags to map from jsp to bean class and able to perform all the action with a single object.

But my problem is how can i do the same work for more then one object(record).

In simple word: How do I insert 7 rows(records) into the database table at one time, using input data from my jsp page. How do I accept input parameters from my jsp page and create 7 objects that correspond to 7 rows and then insert them on the click of submit button?

Please provide some guidance for this.

Upvotes: 2

Views: 10483

Answers (1)

Felix L
Felix L

Reputation: 246

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>

Upvotes: 9

Related Questions