如何使用Java Spring框架将Web表单中的多行插入数据库
问题内容:
我是Java Spring Framework的新手,对新项目有要求。
使用Spring框架,我有一个带有set和get方法的POJO类。我也有中间的Java服务和Web类。我已经使用<form>
标签将jsp映射到bean类,并且能够使用单个对象执行所有操作。
但是我的问题是我如何才能对一个以上的对象(记录)进行相同的工作。
简而言之:如何使用jsp页面中的输入数据一次将7行(记录)插入数据库表中。如何从jsp页面接受输入参数,并创建与7行相对应的7个对象,然后单击“提交”按钮将其插入?
请为此提供一些指导。
问题答案:
我可以通过将另一个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>