`

Struts中不限个数上传文件的实现方案

    博客分类:
  • web
阅读更多
     在使用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实现的文件上传功能

    Struts2是一个强大的MVC(模型...总的来说,Struts2提供了一个方便且可扩展的文件上传解决方案,使得开发者能够轻松地在Web应用中实现这一功能。通过以上步骤,你可以在Tomcat服务器上直接部署并运行你的文件上传应用。

    struts1.2和commons-fileupload实现文件上传

    Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...

    ext struts2 swfupload 跨域文件上传

    "ext struts2 swfupload 跨域文件上传"这个主题涉及到三个关键技术和概念:EXTJS(Ext JS)、Struts2以及SwfUpload,它们共同解决了Web应用中的跨域文件上传问题。 EXTJS是一种强大的JavaScript库,用于构建富...

    struts2文件上传下载实例

    在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...

    java文件上传,Struts2文件上传,demo下载

    在上述示例中,我们使用了Struts2的`fileUpload`拦截器来处理文件上传,并在Action中实现了文件的保存逻辑。同时,我们还限制了文件的大小和类型,以防止恶意大文件上传或不安全的文件类型。 `TestUpload`可能是这...

    struts2+uploadify(2.1.4)的文件上传

    2. **Uploadify基本原理**:Uploadify使用Flash技术实现异步文件上传,允许用户在不刷新页面的情况下上传多个文件。它通过JavaScript与服务器进行通信,使用XMLHttpRequest对象(或jQuery的$.ajax方法)实现AJAX请求...

    Struts2的上传功能还是很强大的,它可以自动拦截上传文件的相关信息……

    在学习和实践中,开发者可以参考CSDN等技术社区的资源,获取关于Struts2文件上传的实战经验和解决方案。遇到问题时,可以发帖提问或搜索已有的解答,与其他开发者交流,共同进步。 综上所述,Struts2的文件上传功能...

    Common-FileUpload与struts2文件上传

    - 在Struts2的Action类中,你可以定义一个`List<File>`或`List<CommonsMultipartFile>`类型的属性,Struts2会自动将上传的文件映射到这些属性上。 5. **Struts2拦截器**: - Struts2的`params`和`fileUpload`拦截...

    struts2文件上传教程

    本教程将详细介绍如何在Struts2中实现文件上传。 首先,我们需要在项目的WEB-INF目录下添加两个关键的库文件:`commons-fileupload-1.2.1.jar` 和 `commons-io-1.3.2.jar`。这些文件是Apache Commons项目的一部分,...

    struts2上传文件

    这篇博客文章(遗憾的是,由于没有直接提供具体内容,我无法提供更详细的博客内容摘要),可能详细介绍了如何在Struts2框架中实现文件上传,以及可能遇到的问题和解决方案。 首先,让我们概述文件上传的基本流程: ...

    struts2单文件上传带进度条

    Struts2的Action接收到文件后,可以选择临时存储、直接保存到目标位置或者先存入内存。同时,你需要处理`onprogress`事件传递过来的进度信息,将其返回给前端。这通常通过自定义的JSON响应或设置HTTP头信息实现。 ...

    struts2文件上传与下载

    总结来说,Struts2文件上传与下载涉及了Struts2的配置、Action处理、文件处理、安全策略等多个方面,而SSH框架的整合使得这些功能能够在一个完整的应用架构中顺畅运行。通过深入理解和实践这些知识点,开发者能够...

    支持单文件和多文件上传,两种下载方式,Struts2

    3. Action处理:在Action类中,定义一个`File`类型的属性和一个`String`类型的属性(用于保存文件名),Struts2会自动将上传的文件绑定到这些属性上。 三、多文件上传 1. 表单配置:在表单中可以使用多个`...

    struts2(ssh)带进度条文件上传 demo 的jar包3

    在这个"struts2(ssh)带进度条文件上传 demo 的jar包3"中,我们主要关注的是Struts2如何实现文件上传功能,并且这个功能还带有进度条显示,这是提升用户体验的一个重要特性。 文件上传在Web应用中很常见,例如用户...

    swfupload+struts2多文件上传的例子

    通过以上步骤,你就成功地在Struts2中整合了SWFUpload,实现了多文件上传功能。这个DEMO可以帮助初学者理解这种集成方式,同时也可以作为一个基础模板,根据实际需求进行扩展和优化。记住,实际开发中还需要考虑错误...

    swfupload 多文件上传 使用框架struts2

    这个库利用Flash技术,能够在不重新加载页面的情况下实现文件的批量上传,提高了用户体验。在本篇文章中,我们将深入探讨如何在Struts2框架下集成SwfUpload实现这一功能。 首先,让我们理解SwfUpload的工作原理。...

    uploadify+struts2多文件上传实例

    `uploadify`与`Struts2`结合的多文件上传实例就是一个典型的解决方案,尤其针对跨浏览器兼容性问题,如在Firefox下的session问题。下面我们将深入探讨这两个技术以及它们如何协同工作。 `Uploadify`是一个基于...

    Struts2文件上传下载.docx

    本文将详细介绍如何使用Struts2框架实现文件的上传和下载功能,并展示一个简单的示例来帮助理解整个流程。 #### 二、技术栈 - **前端**: HTML、JSP、JQuery - **后端**: Java、Struts2 - **数据库**: (本例不涉及...

Global site tag (gtag.js) - Google Analytics