2

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.

bakoyaro
  • 2,550
  • 3
  • 36
  • 63
JBT
  • 73
  • 1
  • 1
  • 9
  • Use indexed properties : data[0].name, for example. See http://stackoverflow.com/questions/1429760/command-objects-in-spring – JB Nizet Nov 10 '11 at 12:07

1 Answers1

9

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>
Felix L
  • 246
  • 1
  • 3
  • Hi Felix thanks for your response. I have this criteria in my mind but the issue is there are hundreds of JSP pages where i have to show 100 of different objects like that(in tabular format) so i ll have to create the unique container for all the POJO's that seems to be lil but lengthy. I am looking for some generic way to this if there is any. Meanwhile thanks for explaining this solution in such a simple way :) – JBT Nov 10 '11 at 14:31
  • You're welcome :) You could add some genericity to this by making the `PojoForm` class generic `PojoForm` thus it could be used for several pojos. – Felix L Nov 10 '11 at 15:22
  • Thanks again i don't know why it didn't come in my mind. :( I have tried to change the code and used List> instead of List but now application is not working it is throwing java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) Exception. Don't understand what exactly is the problem. Also in view part we have added different entry for different POJO( For POJO1 and POJO2...as above) is there any way to loop in JSP number of times there are POJO in list? – JBT Nov 10 '11 at 17:05
  • @user1037849 Make sure that you populate your list correctly, as this seems to be your problem. I have edited my answer with the method `populatePojos()` as an example. I also added a way to loop on the list in the JSP. – Felix L Nov 10 '11 at 17:42
  • Now it is working as expected. Thanks Felix for all your help. :) – JBT Nov 10 '11 at 18:39
  • +1 For great answer, however I don't see how the rows are INSERTED as much a s they are UPDATED as they have to be allocated before the page is rendered (for(int i=0; i<2; i++) { pojos.add(new Pojo()); } in your code example above). I would love to see how you could INSERT multiple new rows that don't already exist in the list! – Mr. Developerdude Aug 13 '12 at 08:46