• struts使用list提交多行表单(提供完整示例)


        在struts框架中常常会遇到多行表单的情况, 如何有效的利用struts框架提供的自动收集机制来处理呢? 这里提供一个示例.

    1.示例功能:通过一个【提交】按钮保存多行人员信息,如附件中的图片所示。

    2.核心类代码:

      TestForm.java
    Java代码 复制代码
    1. public class TestForm extends ActionForm{   
    2.   
    3.     private List voList = null;   
    4.     public List getVoList() {   
    5.         return voList;   
    6.     }   
    7.     public void setVoList(List voList) {   
    8.         this.voList=voList;   
    9.     }   
    10.   
    11. }  
    public class TestForm extends ActionForm{
    
    	private List voList = null;
    	public List getVoList() {
    		return voList;
    	}
    	public void setVoList(List voList) {
    		this.voList=voList;
    	}
    
    }
    

    PreAction.java:准备初始数据
    Java代码 复制代码
    1. public class PreAction extends Action {   
    2.   
    3.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
    4.             HttpServletRequest request, HttpServletResponse response) {   
    5.         TestForm aform = (TestForm)form;   
    6.         TestVo vo1=new TestVo("1","vo1","11");   
    7.         TestVo vo2=new TestVo("2","vo2","22");   
    8.         TestVo vo3=new TestVo("3","vo3","33");   
    9.         List voList = new ArrayList();   
    10.         voList.add(vo1);   
    11.         voList.add(vo2);   
    12.         voList.add(vo3);   
    13.         aform.setVoList(voList);   
    14.         return mapping.findForward("jsp1");   
    15.            
    16.     }   
    17. }  
    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:编辑保存的页面
    Java代码 复制代码
    1. <%@ page language="java" contentType="text/html;charset=UTF-8"pageEncoding="GBK"%>   
    2. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>   
    3. <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>   
    4. <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>   
    5.   
    6. <html>   
    7.     <head><title>This is jsp1.</title></head>   
    8.   
    9.     <body>   
    10.         <B>Edit</B>   
    11.         <html:form action="/saveAction">   
    12.             <TABLE>   
    13.                 <TR>   
    14.                     <TD>id</TD>   
    15.                     <TD>name</TD>   
    16.                     <TD>age</TD>   
    17.                 </TR>   
    18.                 <logic:iterate id="vo" name="testForm" property="voList" indexId="index1">   
    19.                 <TR>   
    20.                     <TD><input name='voList[<bean:write name="index1"/>].id' value='<bean:write name="vo" property="id"/>'></TD>   
    21.                     <TD><input name='voList[<bean:write name="index1"/>].name' value='<bean:write name="vo" property="name"/>'></TD>   
    22.                     <TD><input name='voList[<bean:write name="index1"/>].age' value='<bean:write name="vo" property="age"/>'></TD>   
    23.                 </TR>   
    24.                 </logic:iterate>   
    25.             </TABLE>   
    26.             <input type="submit" value=" 提交 " />   
    27.         </html:form>   
    28.   
    29.     </body>   
    30. </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:保存多行数据
    Java代码 复制代码
    1. public class SaveAction extends Action {   
    2.   
    3.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
    4.             HttpServletRequest request, HttpServletResponse response) {   
    5.         TestForm aform = (TestForm)form;   
    6.         List voList=aform.getVoList();   
    7.         //TODO:you can save data to database here.   
    8.            
    9.         request.setAttribute("voList", voList);   
    10.         return mapping.findForward("jsp2");   
    11.     }   
    12.   
    13. }  
    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:展示保存结果
    Java代码 复制代码
    1. <%@ page language="java" contentType="text/html;charset=UTF-8"  
    2.     pageEncoding="GBK"%>   
    3. <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>   
    4. <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>   
    5. <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>   
    6.   
    7. <html>   
    8.     <head><title>This is jsp2.</title></head>   
    9.     <body>   
    10.         <B>View</B>   
    11.         <br>   
    12.             <TABLE border=1>   
    13.                 <TR>   
    14.                     <TD>id</TD>   
    15.                     <TD>name</TD>   
    16.                     <TD>age</TD>   
    17.                 </TR>   
    18.                 <logic:iterate id="vo" name="voList">   
    19.                 <TR>   
    20.                     <TD><bean:write name="vo" property="id"/></TD>   
    21.                     <TD><bean:write name="vo" property="name"/></TD>   
    22.                     <TD><bean:write name="vo" property="age"/></TD>   
    23.                        
    24.                 </TR>   
    25.                 </logic:iterate>   
    26.             </TABLE>   
    27.     </body>   
    28. </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.如果同时需要删除、添加行的功能:
    实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。
    • testguo.rar (993.6 KB)
    • 描述: MyEclipse工程(所有示例代码)
    • 下载次数: 408
    • D4f78f3e-f169-326b-8f4c-83b4fa5ca228-thumb
    • 描述: jsp页面效果
    • 大小: 3.5 KB
  • 相关阅读:
    构造与析构的次序
    为什么析构函数常声明为虚函数
    偏移数组的二分查找
    字符串循环右移N位
    const 补充
    对类 sizeof
    指针与引用
    python小练习
    初学数据挖掘——相似性度量(一)
    每天进步一点点(二)
  • 原文地址:https://www.cnblogs.com/huqingyu/p/1329794.html
Copyright © 2020-2023  润新知