在struts框架中常常会遇到多行表单的情况, 如何有效的利用struts框架提供的自动收集机制来处理呢? 这里提供一个示例.
1.示例功能:通过一个【提交】按钮保存多行人员信息,如附件中的图片所示。
2.核心类代码:
TestForm.java
PreAction.java:准备初始数据
jsp1.jsp:编辑保存的页面
SaveAction.java:保存多行数据
jsp2.jsp:展示保存结果
3.几点说明:
A.strut填充ActionForm的方法:
如果key是简单的'name',直接form.setName(map.get('name'));
如果key是'person.name', 执行的操作是 form.getPerson().setName(map.get('person.name');
如果key是'voList[0].name', 它可以对应到数据或集合中,如对于数组 form.voList[0].name=map.get('voList[0].name'); 对于集合(List) form.getVoList().get(0).setName(map.get('voList[0].name'))
B.如果同时需要删除、添加行的功能:
实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。
1.示例功能:通过一个【提交】按钮保存多行人员信息,如附件中的图片所示。
2.核心类代码:
TestForm.java
- public class TestForm extends ActionForm{
- private List voList = null;
- public List getVoList() {
- return voList;
- }
- public void setVoList(List voList) {
- this.voList=voList;
- }
- }
public class TestForm extends ActionForm{ private List voList = null; public List getVoList() { return voList; } public void setVoList(List voList) { this.voList=voList; } }
PreAction.java:准备初始数据
- public class PreAction extends Action {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- TestForm aform = (TestForm)form;
- TestVo vo1=new TestVo("1","vo1","11");
- TestVo vo2=new TestVo("2","vo2","22");
- TestVo vo3=new TestVo("3","vo3","33");
- List voList = new ArrayList();
- voList.add(vo1);
- voList.add(vo2);
- voList.add(vo3);
- aform.setVoList(voList);
- return mapping.findForward("jsp1");
- }
- }
public class PreAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { TestForm aform = (TestForm)form; TestVo vo1=new TestVo("1","vo1","11"); TestVo vo2=new TestVo("2","vo2","22"); TestVo vo3=new TestVo("3","vo3","33"); List voList = new ArrayList(); voList.add(vo1); voList.add(vo2); voList.add(vo3); aform.setVoList(voList); return mapping.findForward("jsp1"); } }
jsp1.jsp:编辑保存的页面
- <%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="GBK"%>
- <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
- <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
- <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
- <html>
- <head><title>This is jsp1.</title></head>
- <body>
- <B>Edit</B>
- <html:form action="/saveAction">
- <TABLE>
- <TR>
- <TD>id</TD>
- <TD>name</TD>
- <TD>age</TD>
- </TR>
- <logic:iterate id="vo" name="testForm" property="voList" indexId="index1">
- <TR>
- <TD><input name='voList[<bean:write name="index1"/>].id' value='<bean:write name="vo" property="id"/>'></TD>
- <TD><input name='voList[<bean:write name="index1"/>].name' value='<bean:write name="vo" property="name"/>'></TD>
- <TD><input name='voList[<bean:write name="index1"/>].age' value='<bean:write name="vo" property="age"/>'></TD>
- </TR>
- </logic:iterate>
- </TABLE>
- <input type="submit" value=" 提交 " />
- </html:form>
- </body>
- </html>
<%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="GBK"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> <html> <head><title>This is jsp1.</title></head> <body> <B>Edit</B> <html:form action="/saveAction"> <TABLE> <TR> <TD>id</TD> <TD>name</TD> <TD>age</TD> </TR> <logic:iterate id="vo" name="testForm" property="voList" indexId="index1"> <TR> <TD><input name='voList[<bean:write name="index1"/>].id' value='<bean:write name="vo" property="id"/>'></TD> <TD><input name='voList[<bean:write name="index1"/>].name' value='<bean:write name="vo" property="name"/>'></TD> <TD><input name='voList[<bean:write name="index1"/>].age' value='<bean:write name="vo" property="age"/>'></TD> </TR> </logic:iterate> </TABLE> <input type="submit" value=" 提交 " /> </html:form> </body> </html>
SaveAction.java:保存多行数据
- public class SaveAction extends Action {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- TestForm aform = (TestForm)form;
- List voList=aform.getVoList();
- //TODO:you can save data to database here.
- request.setAttribute("voList", voList);
- return mapping.findForward("jsp2");
- }
- }
public class SaveAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { TestForm aform = (TestForm)form; List voList=aform.getVoList(); //TODO:you can save data to database here. request.setAttribute("voList", voList); return mapping.findForward("jsp2"); } }
jsp2.jsp:展示保存结果
- <%@ page language="java" contentType="text/html;charset=UTF-8"
- pageEncoding="GBK"%>
- <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
- <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
- <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
- <html>
- <head><title>This is jsp2.</title></head>
- <body>
- <B>View</B>
- <br>
- <TABLE border=1>
- <TR>
- <TD>id</TD>
- <TD>name</TD>
- <TD>age</TD>
- </TR>
- <logic:iterate id="vo" name="voList">
- <TR>
- <TD><bean:write name="vo" property="id"/></TD>
- <TD><bean:write name="vo" property="name"/></TD>
- <TD><bean:write name="vo" property="age"/></TD>
- </TR>
- </logic:iterate>
- </TABLE>
- </body>
- </html>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="GBK"%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> <html> <head><title>This is jsp2.</title></head> <body> <B>View</B> <br> <TABLE border=1> <TR> <TD>id</TD> <TD>name</TD> <TD>age</TD> </TR> <logic:iterate id="vo" name="voList"> <TR> <TD><bean:write name="vo" property="id"/></TD> <TD><bean:write name="vo" property="name"/></TD> <TD><bean:write name="vo" property="age"/></TD> </TR> </logic:iterate> </TABLE> </body> </html>
3.几点说明:
A.strut填充ActionForm的方法:
如果key是简单的'name',直接form.setName(map.get('name'));
如果key是'person.name', 执行的操作是 form.getPerson().setName(map.get('person.name');
如果key是'voList[0].name', 它可以对应到数据或集合中,如对于数组 form.voList[0].name=map.get('voList[0].name'); 对于集合(List) form.getVoList().get(0).setName(map.get('voList[0].name'))
B.如果同时需要删除、添加行的功能:
实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。