在使用Struts的系统中使用 org.apache.struts.upload.FormFile 可以很方便的实现文件的上传,无论是单个或者多个文件。不过又应该如何来实现不限个数的文件上传呢?
首先,在Jsp页面中,需要有像163那样动态添加附件的功能,这个可以使用JS来实现。代码如下:
[align=top" />fileTD";
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] var fileId = "uploadFile(" +fileIndex+ ")";
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] addInputFile(spanId, fileId);
[img]http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top[/img] }
[img]http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top[/img] function addInputFile(spanId, fileId)
{
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] var span = document.getElementById(spanId);
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] if (span != null)
{
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] var divObj = document.createElement("div");
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] var fileObj, delObj;
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] divObj.id = fileId;
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] fileObj = document.createElement("");
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] delObj = document.createElement("");
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] fileObj.name = fileId;
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] fileObj.size = "40";
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] fileObj.className = "input";
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] delObj.value ='删除';
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] divObj.appendChild(fileObj);
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] divObj.appendChild(document.createTextNode(" "));
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] divObj.appendChild(delObj);
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] span.appendChild(divObj);
[img]http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" align="top[/img] }
[img]http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top[/img] }
[img]http://www.blogjava.net/Images/OutliningIndicators/None.gif" alt="" align="top[/img] function delInputFile(spanId, fileId)
{
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] var span = document.getElementById(spanId);
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] var divObj = document.getElementById(fileId);
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] if (span != null && divObj != null)
{
[img]http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" alt="" align="top[/img] span.removeChild(divObj);
[img]http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" align="top[/img] }
[img]http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" align="top[/img] }[/align]
上面代码中的Html和JS代码就可以实现动态添加行的效果。(上述JS代码参考了一位网友的实现,这里对他表示感谢。)
Html代码中的 容易让人迷惑,我也是第一次写 name="uploadFile(0)"这样的Html代码。
这里的uploadFile(0)表示数组中index=0的元素,那么在Struts的FormBean中又应该如何让BeanUtils在做反射的时候可以正确的赋值呢?
来看一下FormBean中的代码:
[align=top" />[/align]
这里提供的setUploadFIle(String index, FormFile formFile)其实就是给BeanUtils一个正确的借口,让它可以对uploadFile(0)这样的元素进行正确的反射。当然,这里不用考虑index,直接将formFile添加进list中。
因此,在Struts中不限个数上传文件的实现中,主要是页面中动态添加上传文件行和在FormBean中正确赋值,Action中要做的相信就很简单了,只要把FormBean中的List取出来逐个进行操作。
分享到:
相关推荐
Struts2是一个强大的MVC(模型...总的来说,Struts2提供了一个方便且可扩展的文件上传解决方案,使得开发者能够轻松地在Web应用中实现这一功能。通过以上步骤,你可以在Tomcat服务器上直接部署并运行你的文件上传应用。
Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...
"ext struts2 swfupload 跨域文件上传"这个主题涉及到三个关键技术和概念:EXTJS(Ext JS)、Struts2以及SwfUpload,它们共同解决了Web应用中的跨域文件上传问题。 EXTJS是一种强大的JavaScript库,用于构建富...
在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...
在上述示例中,我们使用了Struts2的`fileUpload`拦截器来处理文件上传,并在Action中实现了文件的保存逻辑。同时,我们还限制了文件的大小和类型,以防止恶意大文件上传或不安全的文件类型。 `TestUpload`可能是这...
2. **Uploadify基本原理**:Uploadify使用Flash技术实现异步文件上传,允许用户在不刷新页面的情况下上传多个文件。它通过JavaScript与服务器进行通信,使用XMLHttpRequest对象(或jQuery的$.ajax方法)实现AJAX请求...
在学习和实践中,开发者可以参考CSDN等技术社区的资源,获取关于Struts2文件上传的实战经验和解决方案。遇到问题时,可以发帖提问或搜索已有的解答,与其他开发者交流,共同进步。 综上所述,Struts2的文件上传功能...
- 在Struts2的Action类中,你可以定义一个`List<File>`或`List<CommonsMultipartFile>`类型的属性,Struts2会自动将上传的文件映射到这些属性上。 5. **Struts2拦截器**: - Struts2的`params`和`fileUpload`拦截...
本教程将详细介绍如何在Struts2中实现文件上传。 首先,我们需要在项目的WEB-INF目录下添加两个关键的库文件:`commons-fileupload-1.2.1.jar` 和 `commons-io-1.3.2.jar`。这些文件是Apache Commons项目的一部分,...
这篇博客文章(遗憾的是,由于没有直接提供具体内容,我无法提供更详细的博客内容摘要),可能详细介绍了如何在Struts2框架中实现文件上传,以及可能遇到的问题和解决方案。 首先,让我们概述文件上传的基本流程: ...
Struts2的Action接收到文件后,可以选择临时存储、直接保存到目标位置或者先存入内存。同时,你需要处理`onprogress`事件传递过来的进度信息,将其返回给前端。这通常通过自定义的JSON响应或设置HTTP头信息实现。 ...
总结来说,Struts2文件上传与下载涉及了Struts2的配置、Action处理、文件处理、安全策略等多个方面,而SSH框架的整合使得这些功能能够在一个完整的应用架构中顺畅运行。通过深入理解和实践这些知识点,开发者能够...
3. Action处理:在Action类中,定义一个`File`类型的属性和一个`String`类型的属性(用于保存文件名),Struts2会自动将上传的文件绑定到这些属性上。 三、多文件上传 1. 表单配置:在表单中可以使用多个`...
在这个"struts2(ssh)带进度条文件上传 demo 的jar包3"中,我们主要关注的是Struts2如何实现文件上传功能,并且这个功能还带有进度条显示,这是提升用户体验的一个重要特性。 文件上传在Web应用中很常见,例如用户...
通过以上步骤,你就成功地在Struts2中整合了SWFUpload,实现了多文件上传功能。这个DEMO可以帮助初学者理解这种集成方式,同时也可以作为一个基础模板,根据实际需求进行扩展和优化。记住,实际开发中还需要考虑错误...
这个库利用Flash技术,能够在不重新加载页面的情况下实现文件的批量上传,提高了用户体验。在本篇文章中,我们将深入探讨如何在Struts2框架下集成SwfUpload实现这一功能。 首先,让我们理解SwfUpload的工作原理。...
`uploadify`与`Struts2`结合的多文件上传实例就是一个典型的解决方案,尤其针对跨浏览器兼容性问题,如在Firefox下的session问题。下面我们将深入探讨这两个技术以及它们如何协同工作。 `Uploadify`是一个基于...
本文将详细介绍如何使用Struts2框架实现文件的上传和下载功能,并展示一个简单的示例来帮助理解整个流程。 #### 二、技术栈 - **前端**: HTML、JSP、JQuery - **后端**: Java、Struts2 - **数据库**: (本例不涉及...