您的位置:首页 > Web前端 > JavaScript

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: