struts利用List多行提交

来源:百度文库 编辑:神马文学网 时间:2024/05/24 05:01:58

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

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

2.核心类代码:

TestVo.java

package com.aaa.struts.form;

public class TestVo {

private String id;

private String name;

private String age;

public TestVo(){
  
}

public TestVo(String id, String name, String age) {
   super();
   this.id = id;
   this.name = name;
   this.age = age;
}

public String getAge() {
   return age;
}

public void setAge(String age) {
   this.age = age;
}

public String getId() {
   return id;
}

public void setId(String id) {
   this.id = id;
}

public String getName() {
   return name;
}

public void setName(String name) {
   this.name = name;
}

}

 

 

 



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. }  


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. }  


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.   
  7.      This is jsp1.   
  8.   
  9.        
  10.          Edit   
  11.          "/saveAction">   
  12.                
  13.                 
  14.   
  15.                     
  16.   
  17.                     
  18.   
  19.                     
  20.   
  21.                 
  22.   
  23.                  "vo" name="testForm" property="voList" indexId="index1">   
  24.                 
  25.   
  26.                     
  27.   
  28.                     
  29.   
  30.                     
  31.   
  32.                 
  33.   
  34.                    
  35.             
  36. idnameage
    'voList[].id' value=''>'voList[].name' value=''>'voList[].age' value=''>
      
  37.              "submit" value=" 提交 " />   
  38.            
  39.   
  40.        
  41.   


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. }  


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.   
  8.      This is jsp2.   
  9.        
  10.          View   
  11.         
      
  12.              1>   
  13.                 
  14.   
  15.                     
  16.   
  17.                     
  18.   
  19.                     
  20.   
  21.                 
  22.   
  23.                  "vo" name="voList">   
  24.                 
  25.   
  26.                     
  27.   
  28.                     
  29.   
  30.                     
  31.   
  32.                        
  33.                 
  34.   
  35.                    
  36.             
  37. idnameage
    "vo" property="id"/>"vo" property="name"/>"vo" property="age"/>
      
  38.        
  39.   



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.如果同时需要删除、添加行的功能:
实现添加不难但实现删除较难,建议有这样需求的还是不要同时提交多行的较好。