`
walnut
  • 浏览: 104840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

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

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

}

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

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>

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

}

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>


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工程(所有示例代码)
  • 下载次数: 1315
  • 描述: jsp页面效果
  • 大小: 3.5 KB
分享到:
评论
7 楼 rayzhng 2008-10-30  
更实用的代码,解决空值的异常问题
import java.util.ArrayList;
//如果有20行表单输入域但只输入了前三行,后面的输入域会变成空值,重写ArrayList 的get()会避免这一问题
public class AutoArrayList extends ArrayList {
    
    private Class itemClass;
    
    public AutoArrayList(Class itemClass) {
        this.itemClass = itemClass;
    }
    
    public Object get(int index) {
        try<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script> {
            while (index >= size()) {
                add(itemClass.newInstance());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return super.get(index);
    }
}

public class TestForm extends ActionForm{

	private List voList = new AutoArrayList(FieldItem.class);
	public List getVoList() {
		return voList;
	}
	public void setVoList(List voList) {
		this.voList=voList;
	}

}

<c:forEach begin="0" end="20" var="i">
	<tr>
		 
		<td class="tdEditContent"><input type="text" name="voList.[${i}].id" value="voList${[i]       .id}">
		</td>
	<td class="tdEditContent"><input type="text" name="voList.[${i}].name" value="voList${[i]       .name}">
		</td>
	<td class="tdEditContent"><input type="text" name="voList.[${i}].age" value="voList${[i]       .age}">
		</td>
		 
	</tr>
</c:forEach>

 
6 楼 lkjust08 2008-10-30  
LZ用心了,
5 楼 sklst 2008-10-29  
这个貌似用DWR很容易解决。
楼主确定没有造轮子?
4 楼 ice123456 2008-10-29  
是过10行,或20行添加也不需要改变代码的情况没?
3 楼 octopusyu 2008-10-29  
javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:44)

2 楼 tryc 2008-09-23  
我按你的方法同样写了一个却不能运行,初始化出来了,但提交的保存的时候报这个有问题,
name='voList[<bean:write name="index1"/>].id
用你的代码却没问题,不知道是哪边出了问题。
1 楼 grubby4k 2008-03-09  
你删除的界面是作出 和邮箱里删邮件一样的吗

相关推荐

    struts中多行提交问题

    本文将深入探讨如何在Struts框架下实现多行数据的动态添加与提交,结合给定的代码示例进行详细解析。 ### Struts框架简介 Struts是Apache软件基金会下的一个开源项目,它是一个基于MVC(Model-View-Controller)...

    struts1.2 from表单提交包含list的对象

    至于"unicom"这个文件名,可能是指一个具体的案例或示例项目,它可能包含了处理Struts1.2表单提交的代码和配置。如果能访问到这个项目,可以更深入地学习Struts1.2处理包含列表对象的表单提交的实践细节。 总结来说...

    一个Struts1多文件上传实例(附Form中传List示例)

    在Struts1中,ActionForm类需要有一个对应的List字段来接收这些值,这样在提交表单时,Struts1的默认Binding机制会自动将这些值绑定到List中。 4. **配置文件**: 配置文件(struts-config.xml)需要添加相应的...

    用Struts的Token机制解决表单重复提交.doc

    ### 使用Struts Token机制解决表单重复提交 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题。用户可能因为网络延迟、浏览器缓存等原因导致重复点击提交按钮,进而向服务器发送多个相同的...

    jsp中struts2.0标签应用示例

    "jsp中struts2.0标签应用示例"这个主题主要关注如何在JSP页面中利用Struts2.0提供的标签进行视图层的构建,通过实际例子展示了`&lt;s:form&gt;`、`&lt;s:textfield&gt;`、`&lt;s:password&gt;`、`&lt;s:select&gt;`等常用标签的使用,...

    struts常用标签示例

    本示例将深入探讨Struts中常用的标签及其应用。 1. **`&lt;s:form&gt;`** 标签: 这是Struts2中最基本的表单标签,用于创建HTML表单。它可以自动绑定到Action类的属性,提供数据验证等功能。例如: ```jsp 用户名"/&gt;...

    struts2标签使用例子

    在压缩包中的"example"文件可能包含了一个或多个使用Struts2标签的实际示例,可以参考这些示例来理解和学习Struts2标签的用法。通过实践,你会更好地掌握这些标签的功能和用法,从而在开发过程中更加得心应手。

    Struts2+ajax+json返回list.docx

    在Web开发中,Struts2、Ajax和JSON的结合使用能实现异步数据交互,提高用户体验。本实例展示了如何在Struts2框架下,通过Ajax发送请求获取JSON数据,并将数据返回到JSP页面,以填充下拉列表(`&lt;s:select/&gt;`标签)。 ...

    struts2集合示例

    如果表单提交的数据是数组或集合,Struts2的Parameters拦截器会自动处理并将其转化为对应的集合类型。 4. **JSP页面**:在JSP页面中,你可以使用Struts2的标签库来遍历和显示集合中的元素。例如,使用`s:iterator`...

    (原创)struts标签之checkboxlist选中值并换行处理

    ### Struts标签之CheckboxList选中值与换行处理详解 #### 一、引言 在Web应用开发中,表单元素的选择对于用户交互至关重要。Struts框架作为Java Web开发中的一个重要工具,提供了丰富的标签库来帮助开发者快速构建...

    struts1.2标签实例

    Struts1.2标签是Java Web开发中Struts框架的一部分,它提供了一种在JSP页面中更加便捷、可维护的方式来处理业务逻辑和控制流程。Struts1.2标签库大大简化了视图层的开发,使开发者可以避免过多地在JSP中编写Java脚本...

    Struts2文件上传示例

    在Struts2中,文件上传功能是通过`FileUpload`拦截器实现的,它可以让我们处理用户通过表单提交的文件。这个"Struts2文件上传示例"包含了如何在实际项目中实现这一功能的代码和配置。 首先,我们需要了解Struts2中...

    Struts2案例翻译篇-Using Struts2 Tag

    Struts2标签库是基于JSP标准标签库(JSTL)的扩展,它提供了一系列预定义的标签,用于处理表单、链接、显示数据等常见的web交互。这些标签不仅简化了HTML代码,还提供了与Struts2框架的深度集成,如数据绑定、验证...

    Struts2标签 UI标志又可以分为表单UI和非表单UI两部分

    ### Struts2 标签详解:表单UI与非表单UI #### 一、概述 Struts2作为Java Web开发中的一个重要框架,为开发者提供了丰富的标签库来简化Web页面的构建过程。根据官方文档所述,“UI标签又可以分为表单UI和非表单UI...

    struts2-tags-API,struts2标签api

    Struts2标签库是基于JSP标准标签库(JSTL)的扩展,它提供了一系列预定义的标签,用于处理视图层的展示逻辑,如表单处理、数据验证、国际化等。这些标签通常比纯HTML和脚本更易于维护,且与Action类解耦,提高了代码...

    struts2官方例子3--使用Struts2标签

    在这个例子中,我们将使用Ant构建Struts2的标签示例: 1. 首先,确保安装了Ant并配置了环境变量。 2. 解压`Using_Tags_Struts2_Ant`压缩包,里面包含了项目的源代码和构建脚本(build.xml)。 3. 在命令行中运行`...

    Struts2标签使用

    ### Struts2 标签使用详解 #### 一、引言 在Web开发领域,Struts2框架以其灵活且强大的特性被广泛采用。Struts2提供了丰富的标签库,这些标签不仅可以帮助开发者简化页面代码,还能提高项目的可维护性和扩展性。...

    struts2文件上传下载示例

    用户通过表单提交包含`&lt;input type="file"&gt;`的HTML,Struts2会自动处理请求并将文件内容存储到指定的临时目录。 2. 多文件上传: 对于多文件上传,可以使用`List&lt;File&gt;`或`File[]`类型的属性。在表单中,用户可以...

    struts上传功能代码示例

    下面我们将详细探讨如何在Struts框架中实现文件上传,并通过代码示例进行解析。 首先,我们需要在Struts配置文件(struts-config.xml)中定义一个Action,这个Action将处理文件上传请求。例如: ```xml ``` ...

Global site tag (gtag.js) - Google Analytics