`

Jsf中实现文件的下载注意的问题

阅读更多

1、关于jsf文件的的下载,其实现类很简单,关键是应用需要注意的问题很多,下面是文件下载的通用类

package com.cvicse.report.ui.viewer.jsf.template;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

/**
 * @author gao_jie 
 * 
 * jsf文件下载操作
 */
public class FileDownLoad {

	/**
	 * 下载文件
	 * @param path
	 * @param fileName
	 */
	public static void downloadFile(String path, String fileName) {
		try {
			// 获得ServletContext对象
			ServletContext servletContext = (ServletContext) FacesContext
					.getCurrentInstance().getExternalContext().getContext();
			// 取得文件的绝对路径
			String realName = servletContext.getRealPath(path) + File.separator
					+ fileName;
			HttpServletResponse response = (HttpServletResponse) FacesContext
					.getCurrentInstance().getExternalContext().getResponse();
			downloadFile(response, realName, fileName);
		} catch (IOException e) {
			e.printStackTrace();
		}
		FacesContext.getCurrentInstance().responseComplete();
	}

	/**
	 * 下载文件
	 * @param response
	 * @param realName
	 * @param fileName
	 * @throws IOException
	 */
	public static void downloadFile(HttpServletResponse response,
			String realName, String fileName) throws IOException {
		fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
		response.setHeader("Content-Disposition", "attachment; filename=\""
				+ fileName + "\"");
		response.setContentType("application/x-msdownload;charset=UTF-8");
		ServletOutputStream servletOutputStream = response.getOutputStream();
		byte[] b = new byte[1024];
		int i = 0;
		FileInputStream fis = new java.io.FileInputStream(realName);
		while ((i = fis.read(b)) > 0) {
			servletOutputStream.write(b, 0, i);
		}
		servletOutputStream.flush();
		servletOutputStream.close();
	}
/**
  * 下载文件到本地
  */
 public void downLoadFileForLocal(String content,String fileName) {
  try {
   HttpServletResponse response = (HttpServletResponse) FacesContext
     .getCurrentInstance().getExternalContext().getResponse();
   String fileName = java.net.URLEncoder
     .encode(fileName, "UTF-8");
   response.setHeader("Content-Disposition", "attachment; filename=\""
     + fileName + "\"");
   response.setContentType("application/x-msdownload;charset=UTF-8");
   ServletOutputStream servletOutputStream = response
     .getOutputStream();
   servletOutputStream.write(content.getBytes());
   servletOutputStream.flush();
   servletOutputStream.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
  FacesContext.getCurrentInstance().responseComplete();
 }
}

 

2、应用该类下载时注意

使用方法 

1、在bean的方法中调用函数1即可。如abean中download方法调用了该方法,前台可以这样调用: 

<h:commandButton value="download" action="#{aBean.download}"></h:commandButton> 

或者 

<h:commandLink value="download" action="#{fileUploadForm.download}"></h:commandLink> 

注意:一定不要用richfaces的ajax中的a4j:commandLink和a4j:commandButton,因为使用原生AJAX之后就会导致文件在页面上生成。
f:view将按钮包裹,注意不要给view添加renderKitId="AJAX"。

2、jsp页面可以这样调用: 

<%@ page contentType="text/html; charset=gb2312"%><%@page import="java.io.*"%><%
    String filename = "";
if (request.getParameter("filename") != null) {
        filename =     request.getParameter("filename");
    }
try {
        FileDownLoad.downloadFile(response,getServletContext().getRealPath(filename),filename);
        } catch(final IOException e) {
            System.out.println ( "出现IOException." + e );
          } catch(final IllegalStateException e) {
            System.out.println ( "出现IllegalStateException." + e );
        }  
%> 

于是jsf页面我们可以借助outputlink来调用该页面 

<h:outputLink id="downloadfile"    value="#{page/FileDownload.jsp?filename=}">
<t:outputText value="下载文件" />
</h:outputLink> 

 

分享到:
评论

相关推荐

    jsf 文件上传和下载

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

    JSF实现的文件上传

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

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

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

    jsf1.2 jar包下载

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

    JSF 上传文件例子

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

    jstl jsf包合集

    值得注意的是,文件列表中有一个名为`jsf.rar`的文件,这可能是一个包含更多JSF相关资源的压缩文件,可能包括示例代码、文档或者其他扩展库。为了使用这些资源,需要解压`jsf.rar`并根据具体需求引入相关的文件。 ...

    JSF 组件WebSphere 平台配置使用说明

    此外,如果JSF实现(如MyFaces和JavaServer Faces RI)同时存在于类路径中,将会导致冲突,后台日志会记录此类错误,并建议只保留一种JSF实现以避免问题。此类问题的解决方法包括清理类路径、确认依赖关系以及可能...

    jsf实现基于ajax的上传例子

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

    一个上传文件的jsf组件

    本篇文章将深入探讨如何使用JSF组件实现文件上传功能,并结合描述和标签来阐述这一主题。 首先,我们需要理解JSF组件的工作原理。JSF是一种基于Java的MVC(模型-视图-控制器)框架,用于构建动态的、数据驱动的Web...

    ajax4jsf-demo

    - **添加依赖**:在项目中导入Ajax4JSF库的JAR文件,通常是通过Maven或Gradle来管理依赖。 - **编写JSF页面**:在XHTML页面中使用Ajax4JSF提供的组件和行为,如`&lt;a4j:commandButton&gt;`、`&lt;a4j:region&gt;`等。 - **配置...

    JSF文件上传

    在这个场景中,我们讨论的是如何使用JSF实现文件上传功能。 首先,为了实现文件上传,我们需要依赖几个关键的库文件。这些文件包括`tomahawk-1.1.3.jar`、`commons-fileupload-1.2.jar`和`commons-io-1.3.1.jar`。...

    struts2.0集成JSF插件

    在提供的"struts4jsf"压缩包中,可能包含Struts2和JSF集成的示例代码、配置文件、以及必要的文档。通过研究这些内容,开发者可以快速上手并掌握Struts2与JSF的集成技巧,从而在实际项目中灵活运用。记住,实践是检验...

    jsf 上传 操作Excel 导入数据库中 浏览器打开Excel表格

    在IT行业中,JavaScript Server Faces(JSF)是一种用于构建企业级Web应用的Java框架,而本文将重点关注如何在JSF环境中实现Excel文件的上传、处理并将其内容导入到数据库中,以及在浏览器中预览Excel表格。...

    JSF中配置dwr

    在JSF中集成Direct Web Remoting (DWR) 可以实现Ajax功能,允许前端JavaScript与后端Java代码进行实时通信,无需刷新整个页面。这篇博文将详细解释如何在JSF项目中配置DWR。 首先,我们需要了解DWR的基本概念。DWR...

    基于JSF全注解框架

    在传统的JSF开发中,开发者通常会使用XML配置文件来定义组件、导航规则等。然而,随着Java注解的广泛使用,JSF也开始支持在代码中直接使用注解来替代XML配置。这使得代码更加简洁,减少了XML配置的复杂性,同时提高...

    jsf+facelets+ajax4jsf的全部jar包

    6. **开发实践**:在实际开发中,开发者可以通过JSF的Managed Beans定义业务逻辑,使用Facelets创建视图,并借助Ajax4jsf实现实时的用户交互。例如,通过Ajax4jsf的AjaxBehavior事件,可以在用户触发某个操作时仅...

    jsf所要的所有包.rar

    此外,为了实现数据持久化和业务逻辑处理,JSF通常会与Java的ORM框架如Hibernate或JPA配合使用,因此在压缩包中可能也会包含相关的JAR文件。Hibernate负责将Java对象映射到数据库表,使得开发者可以以对象的方式操作...

    jsf+spring+hibernate+ajax4jsf

    在IT行业中,构建高效、可扩展的Web应用程序是至关重要的,而"jsf+spring+hibernate+ajax4jsf"的组合提供了一个强大的框架集合来实现这一目标。这个整合涉及四个关键组件:JavaServer Faces (JSF),Spring框架,...

    《jsf第一步》书中例子

    虽然《jsf第一步》的压缩包中未包含库文件,但是开发JSF应用通常需要JDK、JSF实现(如Mojarra或MyFaces)、一个Servlet容器(如Tomcat或Jetty)以及可能的依赖库,例如PrimeFaces或RichFaces这样的组件库,它们提供...

    jsf-api,jsf-impl,jst1-1.2,javaee

    JavaServer Faces(JSF)是Java平台上的一种用于构建用户界面的服务器端框架,它简化了Web应用程序的开发,特别是...在使用过程中,还需要注意不同库之间的版本兼容性,以及正确配置Web.xml文件以启用JSF和JSTL的支持。

Global site tag (gtag.js) - Google Analytics