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环境中实现文件上传和下载,并提供一个可直接在Eclipse下用Tomcat运行的例子。 一、文件上传 1. **依赖库**:在JSF中处理文件上传,我们需要引入Apache Commons FileUpload库,它提供了...
下面将详细介绍如何使用JSF实现文件上传,以及涉及到的关键技术和注意事项。 ### 1. JSF的文件上传组件 JSF提供了`<h:inputFile>`组件来实现文件上传的功能。这个组件允许用户选择本地文件,并将其上传到服务器。...
在JSF Bean中,使用`localExportServer`方法来实现文件的读取和下载。该方法首先从前台页面接收到文件名称,并将其转换为UTF-8编码。然后,使用`FileInputStream`和`OutputStream`来读取和写入文件,实现文件的传输...
2. **jsf-impl.jar**:此JAR文件包含了JSF实现,即对JSF API的具体实现。它提供了JSF规范的底层逻辑,包括生命周期管理、渲染器、默认组件实现等。这个实现库使得开发者无需关注底层细节,可以直接使用JSF提供的服务...
总之,尽管JSF在原生支持文件上传方面存在不足,但通过开发自定义组件或利用第三方库,开发者可以有效地实现文件上传功能,以满足其应用程序的需求。理解这一过程有助于提升JSF开发者的技能,并能更好地应对实际项目...
值得注意的是,文件列表中有一个名为`jsf.rar`的文件,这可能是一个包含更多JSF相关资源的压缩文件,可能包括示例代码、文档或者其他扩展库。为了使用这些资源,需要解压`jsf.rar`并根据具体需求引入相关的文件。 ...
此外,如果JSF实现(如MyFaces和JavaServer Faces RI)同时存在于类路径中,将会导致冲突,后台日志会记录此类错误,并建议只保留一种JSF实现以避免问题。此类问题的解决方法包括清理类路径、确认依赖关系以及可能...
### JSF实现基于Ajax的文件上传案例解析 #### 核心知识点概述 本文将深入探讨如何利用JavaServer Faces (JSF) 和 Ajax 技术来实现一个用户友好的文件上传组件。传统上,通过HTML `<input type="file">` 标签进行...
本篇文章将深入探讨如何使用JSF组件实现文件上传功能,并结合描述和标签来阐述这一主题。 首先,我们需要理解JSF组件的工作原理。JSF是一种基于Java的MVC(模型-视图-控制器)框架,用于构建动态的、数据驱动的Web...
- **添加依赖**:在项目中导入Ajax4JSF库的JAR文件,通常是通过Maven或Gradle来管理依赖。 - **编写JSF页面**:在XHTML页面中使用Ajax4JSF提供的组件和行为,如`<a4j:commandButton>`、`<a4j:region>`等。 - **配置...
在这个场景中,我们讨论的是如何使用JSF实现文件上传功能。 首先,为了实现文件上传,我们需要依赖几个关键的库文件。这些文件包括`tomahawk-1.1.3.jar`、`commons-fileupload-1.2.jar`和`commons-io-1.3.1.jar`。...
在提供的"struts4jsf"压缩包中,可能包含Struts2和JSF集成的示例代码、配置文件、以及必要的文档。通过研究这些内容,开发者可以快速上手并掌握Struts2与JSF的集成技巧,从而在实际项目中灵活运用。记住,实践是检验...
在IT行业中,JavaScript Server Faces(JSF)是一种用于构建企业级Web应用的Java框架,而本文将重点关注如何在JSF环境中实现Excel文件的上传、处理并将其内容导入到数据库中,以及在浏览器中预览Excel表格。...
在JSF中集成Direct Web Remoting (DWR) 可以实现Ajax功能,允许前端JavaScript与后端Java代码进行实时通信,无需刷新整个页面。这篇博文将详细解释如何在JSF项目中配置DWR。 首先,我们需要了解DWR的基本概念。DWR...
在传统的JSF开发中,开发者通常会使用XML配置文件来定义组件、导航规则等。然而,随着Java注解的广泛使用,JSF也开始支持在代码中直接使用注解来替代XML配置。这使得代码更加简洁,减少了XML配置的复杂性,同时提高...
6. **开发实践**:在实际开发中,开发者可以通过JSF的Managed Beans定义业务逻辑,使用Facelets创建视图,并借助Ajax4jsf实现实时的用户交互。例如,通过Ajax4jsf的AjaxBehavior事件,可以在用户触发某个操作时仅...
此外,为了实现数据持久化和业务逻辑处理,JSF通常会与Java的ORM框架如Hibernate或JPA配合使用,因此在压缩包中可能也会包含相关的JAR文件。Hibernate负责将Java对象映射到数据库表,使得开发者可以以对象的方式操作...
在IT行业中,构建高效、可扩展的Web应用程序是至关重要的,而"jsf+spring+hibernate+ajax4jsf"的组合提供了一个强大的框架集合来实现这一目标。这个整合涉及四个关键组件:JavaServer Faces (JSF),Spring框架,...
虽然《jsf第一步》的压缩包中未包含库文件,但是开发JSF应用通常需要JDK、JSF实现(如Mojarra或MyFaces)、一个Servlet容器(如Tomcat或Jetty)以及可能的依赖库,例如PrimeFaces或RichFaces这样的组件库,它们提供...
JavaServer Faces(JSF)是Java平台上的一种用于构建用户界面的服务器端框架,它简化了Web应用程序的开发,特别是...在使用过程中,还需要注意不同库之间的版本兼容性,以及正确配置Web.xml文件以启用JSF和JSTL的支持。