2011-11-10 43 views
2

我是Java Spring Framework的新手,我在新项目中有一个需求。如何使用java spring框架将多行从web表单插入数据库

使用Spring框架,我有一个POJO类的set和get方法。 我也有中级java服务和web类。我使用<form>标记来映射从jsp到bean类,并能够使用单个对象执行所有操作。

但我的问题是我怎么能做更多的一个对象(记录)相同的工作。

简而言之: 如何使用我的jsp页面中的输入数据一次将7行(记录)插入到数据库表中。我如何接受来自我的jsp页面的输入参数并创建与7行对应的7个对象,然后将它们插入点击提交按钮?

请为此提供一些指导。

+0

使用索引的属性:数据[0] .name和例如。请参阅http://stackoverflow.com/questions/1429760/command-objects-in-spring –

回答

8

我可以通过让另一个POJO作为一个容器与您的POJO列表一起实现。

这应该是这样的:

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

然后在控制器上,使用此容器而不是实际的POJO作为一个模型属性。

@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"; 
} 

然后在视图应该是这个样子:

<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和c是POJO类的属性。

您也可以在列表中这样直接循环:

<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

嗨菲利克斯感谢您的回应。我有这个标准在我心中,但问题是有数百个JSP页面,我必须显示100个像这样的不同对象(以表格的格式),所以我将不得不为所有似乎是POJO的容器创建独特的容器小,但很长。如果有的话,我正在寻找一些通用的方法。同时感谢用这种简单的方式来解释这个解决方案:) – JBT

+0

不客气:)你可以通过使'PojoForm'类通用'PojoForm '来增加一些通用性,因此它可以用于多个pojos。 –

+0

再次感谢我不知道为什么它不会出现在我的脑海里。 :(我试图改变代码和使用列表而不是列表,但现在应用程序不工作它是抛出java.lang.IndexOutOfBoundsException:索引:0,大小:0 \t在java.util.ArrayList.RangeCheck(未知源) \t at java.util.ArrayList.get(Unknown Source) 异常:不明白究竟是什么问题,同样在视图部分,我们为不同的POJO添加了不同的条目(对于POJO1和POJO2 ...如上所述)是否有任何方式循环在JSP中有POJO列表中的次数 – JBT

相关问题