`
wanglihu
  • 浏览: 919123 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类

用JSF实现文件下载

 
阅读更多
用户从页面点击连接(link),下载相关的文件,该文件存在服务器端,或者由服务器端生成文件流,没有物理文件;下载后页面不跳转。

JSP代码:

<h:commandLink actionListener="#{productBean.downloadAction}" styleClass="highLightLink">   <h:outputText value="download"/>   <f:param name="productId" value="#{productBean.id}"/></h:commandLink>


Backing bean设计及代码:
注意这是个Action listener方法,没有返回值,并且有javax.faces.event.ActionEvent参数


   public void downloadAction(ActionEvent event) {    try {      String fileName="D:\\temp\\images\\products\\" + this.id + ".xls";      logger.debug("file name=" + fileName);      ByteArrayOutputStream baos=this.serviceLocator.getFileService().downloadFile(fileName); //调用Service方法,获得文件的ByteArrayOutputStream      HttpServletResponse response=FacesUtils.getServletResponse();      response.setHeader("Content-disposition", "attachment; filename=" + id+ ".xls" ); //不是内嵌显示(inline),而是作为附件下载      response.setContentLength(baos.size());      ServletOutputStream sos=response.getOutputStream();      baos.writeTo(sos);      baos.close();      sos.flush();    } catch (IOException ex) {            logger.debug(ex);    }     }


Service代码:
这个实现是一个从已经存在的物理文件获得输出流的范例,至于由Server在内存中生成输出流也是一样处理,例如生成一个Excel文件,再让用户下载。


public ByteArrayOutputStream downloadFile(String fileName) throws IOException {    FileInputStream fis=new FileInputStream(fileName);    BufferedInputStream bis=new BufferedInputStream(fis);    ByteArrayOutputStream baos=new ByteArrayOutputStream();    BufferedOutputStream bos=new BufferedOutputStream(baos);        int i;    while((i=bis.read())!=-1) {      bos.write(i);    }    bos.flush();//提交文件流,很关键    bis.close();    return baos;  }
分享到:
评论

相关推荐

    JSF文件下载实现

    在JavaServer Faces (JSF)框架中,实现文件下载功能是一项常见的需求。在本文中,我们将深入探讨如何使用JSF来实现在Web应用程序中下载文件的功能。主要涉及的关键知识点包括: 1. **JSF上下文环境获取**: 在`...

    JSF文件上传下载

    以上就是JSF文件上传和下载的基本实现。为了确保安全性和性能,还需要考虑错误处理、文件大小限制、临时文件管理以及用户权限控制等细节。同时,现代的Web开发中,还可能结合使用CDN(内容分发网络)和云存储服务来...

    JSF上传 JSF大文件上传 JSF上传代码 JSF上传源代码

    为了实现JSF的大文件上传,开发者通常需要借助第三方库,如Apache Commons FileUpload或者PrimeFaces的FileUpload组件。这些组件提供了分块上传的能力,将大文件切割成小块进行传输,从而避免一次性加载整个文件到...

    使用JSF和MyFaces实现文件上载

    ### 使用JSF和MyFaces实现文件上传 #### 一、理解文件上传机制 在Web开发中,文件上传主要通过HTML表单实现,其中`&lt;input type="file"&gt;`元素用于让用户选择文件。当表单提交时,浏览器将表单数据编码为`multipart/...

    jsf 文件上传和下载

    本文将详细介绍如何在JSF环境中实现文件上传和下载,并提供一个可直接在Eclipse下用Tomcat运行的例子。 一、文件上传 1. **依赖库**:在JSF中处理文件上传,我们需要引入Apache Commons FileUpload库,它提供了...

    JSF实现的文件上传

    下面将详细介绍如何使用JSF实现文件上传,以及涉及到的关键技术和注意事项。 ### 1. JSF的文件上传组件 JSF提供了`&lt;h:inputFile&gt;`组件来实现文件上传的功能。这个组件允许用户选择本地文件,并将其上传到服务器。...

    jsf+ajax实现文件上传

    jsf结合ajax实现文件上传,值得阅读

    poi读取并导出excel(jsf bean 页面的实现)

    在JSF Bean中,使用`localExportServer`方法来实现文件的读取和下载。该方法首先从前台页面接收到文件名称,并将其转换为UTF-8编码。然后,使用`FileInputStream`和`OutputStream`来读取和写入文件,实现文件的传输...

    jsf实现登录功能

    在这个"jsf实现登录功能"的例子中,我们将探讨如何利用JSF来构建一个基本的用户登录系统。 首先,登录功能通常包括两部分:前端页面和后端逻辑。在JSF中,前端页面通常由XHTML文件(.xhtml)组成,这些文件结合了...

    JSF 上传文件例子

    总之,尽管JSF在原生支持文件上传方面存在不足,但通过开发自定义组件或利用第三方库,开发者可以有效地实现文件上传功能,以满足其应用程序的需求。理解这一过程有助于提升JSF开发者的技能,并能更好地应对实际项目...

    jsf2.0 文件上传组件

    由于JSF2.0标准实现没有提供文件上传组件,而实际应用中很多时候需要上传文件,为了方便开发,我做了一个基于JSF2.0的文件上传组件,上传使用的是Apache 的commons-fileupload组件,我已经将commons-fileupload-...

    用jsf做的登录注册的组件

    这可以通过在Bean中定义验证方法或者使用JSF提供的Validator接口实现。 5. **会话管理**:在登录成功后,通常会将用户信息保存在session中,以便后续页面访问时能识别用户身份。JSF提供了`FacesContext`对象来操作...

    JSF标准的两个实现

    **JSF标准的两个实现** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的MVC(Model-View-Controller)框架,它为Web...在实际使用时,需要解压这些文件,并根据项目配置将对应的JSF实现添加到类路径中。

    JSF实现的CRUD例子 myeclipse

    在这个"JSF实现的CRUD例子 myeclipse"中,我们将探讨如何使用JSF和MyEclipse开发一个简单的CRUD(Create, Read, Update, Delete)应用,而无需连接到数据库。 首先,"first-java-server-faces-tutorial-en.pdf"可能...

    生成Excel并在客户端下载的JSF实现

    ### 生成Excel并在客户端下载的JSF实现 #### 概述 在现代的企业级应用开发中,导出数据为Excel格式是一种常见的需求。这不仅便于用户进行数据分析,还能提高系统的易用性。JavaServer Faces(JSF)作为一款广泛使用...

    jsf的资源jar文件,下载即可使用

    总的来说,"jsf的资源jar文件"是一个包含JSF相关组件的压缩包,特别是JSTL的1.2版本实现库和API库。下载并正确引入这些库,开发者可以利用JSF和JSTL的强大功能,构建功能丰富的、基于Java的Web应用程序。

    jsf实现多语言国际化demo

    在这个“jsf实现多语言国际化demo”中,我们将深入探讨如何在 JSF 应用程序中实现这一特性。 首先,我们需要创建一个资源库,存储各种语言的文本。在 JSF 中,通常使用 `.properties` 文件来存储这些资源。例如,...

    jsf上传文件用到的包

    3. **myfaces-extensions.jar**:MyFaces Extensions 是对MyFaces JSF实现的扩展,提供了额外的功能和组件。在文件上传场景中,它可能包含了一些特定的文件上传组件或功能增强,比如进度条显示、文件大小限制等。 4...

    jsf1.2 jar包下载

    2. **jsf-impl.jar**:此JAR文件包含了JSF实现,即对JSF API的具体实现。它提供了JSF规范的底层逻辑,包括生命周期管理、渲染器、默认组件实现等。这个实现库使得开发者无需关注底层细节,可以直接使用JSF提供的服务...

    jsf实现基于ajax的上传例子

    ### JSF实现基于Ajax的文件上传案例解析 #### 核心知识点概述 本文将深入探讨如何利用JavaServer Faces (JSF) 和 Ajax 技术来实现一个用户友好的文件上传组件。传统上,通过HTML `&lt;input type="file"&gt;` 标签进行...

Global site tag (gtag.js) - Google Analytics