JSF实现在动态表格中下载文件(支持中文文件名)
2007-11-28 18:37
639 查看
笔者在最近的项目中遇到动态表格中下载文件的问题,以下是测试的小例子,支持下载中文名的文件.
一 页面test.jsp
1<html>
6<head>
7<title>文件列示</title>
8</head>
9<body>
<f:view>
<h:form>
<t:panelGrid>
<t:panelGroup>
<!-- this is table -->
<t:dataTable id="data" value="#{fileBean.contentList}" var="result" border="1" width="100%" rows="10">
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="编号" />
</f:facet>
<t:outputText value="#{result.number}" />
</t:column>
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="名称" />
</f:facet>
<t:outputText value="#{result.name}" />
</t:column>
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="大小" />
</f:facet>
<t:outputText value="#{result.size}" />
</t:column>
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="操作" />
</f:facet>
<t:commandButton value="下載" actionListener="#{fileBean.downloadFile}" />
</t:column>
</t:dataTable>
</t:panelGroup>
</t:panelGrid>
</h:form>
</f:view>
</body>
</html>
二 MyFile.java
1package com.jakin;
2
3
三,JSF中的bean:FileBean
1package com.jakin;
2
3import java.io.File;
4import java.io.FileInputStream;
5import java.io.IOException;
6import java.util.ArrayList;
7import java.util.List;
8
9import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
public class FileBean private List<MyFile> contentList; // 存放文件的集合
public List<MyFile> getContentList() contentList = new ArrayList<MyFile>();
for (int i = 0; i < 5; i++) MyFile myFile = new MyFile(i + "", i + ".txt", "100K");
contentList.add(myFile);
}
return contentList;
}
public void setContentList(List<MyFile> contentList) this.contentList = contentList;
}
public void downloadFile(ActionEvent e) UIComponent component = (UIComponent) e.getSource();
UIColumn column = (UIColumn) component.getParent();
HtmlDataTable dataTable = (HtmlDataTable) column.getParent();
int listIndex = dataTable.getRowIndex();
MyFile myFile = (MyFile) contentList.get(listIndex);
String name = myFile.getName();
// String name = "轻松搞定XML.pdf";
try File file = new File("D:\\project\\UploadFile\\" + name);
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream servletOutputStream = httpServletResponse
.getOutputStream();
name = java.net.URLEncoder.encode(name, "UTF-8");
httpServletResponse.setHeader("Content-disposition",
"attachment; filename=\"" + name + "\"");
httpServletResponse.setContentLength((int) file.length());
httpServletResponse
.setContentType("application/x-download;charset=UTF-8");
byte[] b = new byte[1024];
int i = 0;
FileInputStream fis = new java.io.FileInputStream(file);
while ((i = fis.read(b)) > 0) servletOutputStream.write(b, 0, i);
}
} catch (IOException ioe) ioe.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();
}
}
一 页面test.jsp
1<html>
6<head>
7<title>文件列示</title>
8</head>
9<body>
<f:view>
<h:form>
<t:panelGrid>
<t:panelGroup>
<!-- this is table -->
<t:dataTable id="data" value="#{fileBean.contentList}" var="result" border="1" width="100%" rows="10">
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="编号" />
</f:facet>
<t:outputText value="#{result.number}" />
</t:column>
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="名称" />
</f:facet>
<t:outputText value="#{result.name}" />
</t:column>
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="大小" />
</f:facet>
<t:outputText value="#{result.size}" />
</t:column>
<t:column rendered="true">
<f:facet name="header">
<t:outputText value="操作" />
</f:facet>
<t:commandButton value="下載" actionListener="#{fileBean.downloadFile}" />
</t:column>
</t:dataTable>
</t:panelGroup>
</t:panelGrid>
</h:form>
</f:view>
</body>
</html>
二 MyFile.java
1package com.jakin;
2
3
三,JSF中的bean:FileBean
1package com.jakin;
2
3import java.io.File;
4import java.io.FileInputStream;
5import java.io.IOException;
6import java.util.ArrayList;
7import java.util.List;
8
9import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
public class FileBean private List<MyFile> contentList; // 存放文件的集合
public List<MyFile> getContentList() contentList = new ArrayList<MyFile>();
for (int i = 0; i < 5; i++) MyFile myFile = new MyFile(i + "", i + ".txt", "100K");
contentList.add(myFile);
}
return contentList;
}
public void setContentList(List<MyFile> contentList) this.contentList = contentList;
}
public void downloadFile(ActionEvent e) UIComponent component = (UIComponent) e.getSource();
UIColumn column = (UIColumn) component.getParent();
HtmlDataTable dataTable = (HtmlDataTable) column.getParent();
int listIndex = dataTable.getRowIndex();
MyFile myFile = (MyFile) contentList.get(listIndex);
String name = myFile.getName();
// String name = "轻松搞定XML.pdf";
try File file = new File("D:\\project\\UploadFile\\" + name);
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream servletOutputStream = httpServletResponse
.getOutputStream();
name = java.net.URLEncoder.encode(name, "UTF-8");
httpServletResponse.setHeader("Content-disposition",
"attachment; filename=\"" + name + "\"");
httpServletResponse.setContentLength((int) file.length());
httpServletResponse
.setContentType("application/x-download;charset=UTF-8");
byte[] b = new byte[1024];
int i = 0;
FileInputStream fis = new java.io.FileInputStream(file);
while ((i = fis.read(b)) > 0) servletOutputStream.write(b, 0, i);
}
} catch (IOException ioe) ioe.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();
}
}
相关文章推荐
- struts2使用action方式实现文件下载(支持中文文件名)
- struts2使用action方式实现文件下载(支持中文文件名)
- struts2 实现文件上传下载 (下载支持中文文件名)代码
- org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名(转)
- struts2 实现文件上传下载 (下载支持中文文件名)代码
- struts2使用action方式实现文件下载(支持中文文件名)
- jsp实现文件下载与中文文件名乱码问题解决
- Struts2 多个文件上传和下载(支持中文文件名)
- struts2 实现中文文件名的文件下载
- jsp实现文件下载与中文文件名乱码问题解决
- Java实现文件下载并解决中文文件名乱码
- struts2文件下载功能实现(文件名中文转码)
- ie 无法下载中文名文件 解决方法 【修改IIS5注册表可以支持中文文件名】
- Ruby on Rails实现文件的下载以及中文文件名乱码问题
- 浏览器下载二维码压缩文件(支持中文文件名)
- 解决Asp.net 实现文件下载时、输出文件时文件名的中文乱码和空格异常
- 用response对象实现文件下载,解决中文文件名乱码。
- JSF导出excel文件文件名使用中文,支持linux
- 实现文件下载与中文文件名乱码问题解决
- Java实现文件下载并解决中文文件名乱码