Java類如下

public static void downloadFile(String path,String fileName) {
try {
// 獲得JSF上下文環(huán)境
??????????? FacesContext context = FacesContext.getCurrentInstance();
// 獲得ServletContext對象
??????????? ServletContext servletContext = (ServletContext) context
??????????????????? .getExternalContext().getContext();
// 取得文件的絕對路徑
??????????? String realName = servletContext.getRealPath(path) + "/"
??????????????????? + fileName;
??????????? HttpServletResponse httpServletResponse =

(HttpServletResponse) FacesContext
??????????? .getCurrentInstance().getExternalContext().getResponse();
??????????? downloadFile(httpServletResponse,realName,fileName);
??????? } catch (IOException e) {
??????????? e.printStackTrace();
??????? }
??????? FacesContext.getCurrentInstance().responseComplete();
??? }
public static void downloadFile(HttpServletResponse response,String? realName,String fileName)

throws IOException
??? {??????
??????? response.setHeader("Content-disposition",
??????????????? "attachment; filename=" + fileName);
??????? response.setContentType("application/x-download");??????
//File exportFile = new File(realName);
??????? //response.setContentLength((int) exportFile.length());
??????? 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);
??????? }
??? }

使用方法

1、在backing bean的方法中調用函數(shù)1即可。如Abean中download方法調用了該方法,前臺可以這樣調用:

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

或者

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

2、jsp頁面可以這樣調用:

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

于是jsf頁面我們可以借助outputlink來調用該頁面

clip_image001[2]<h:outputLink id="downloadfile"??? value="#{page/FileDownload.jsp?filename=}">
clip_image001[3]<t:outputText value="下載文件" />
clip_image001[4]</h:outputLink>
文章來源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!812.entry