`

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的工作原理。...

    struts2的struts.properties配置文件详解

    通过上述对`struts.properties`文件中各个配置项的详细介绍,我们可以看到每个配置项对于构建一个健壮、可维护的Struts2应用都起着至关重要的作用。正确理解和合理配置这些选项对于提高应用程序的性能和安全性至关...

    uploadify+struts2多文件上传实例

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

Global site tag (gtag.js) - Google Analytics