jsf的文件下载 为什么我在jsf页面中写文件的下载的时候,点击下载按钮的时候只是刷新页面,而没有做任何的事情/有知道的高手请指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的代码是这样的:jsf页面<h:dataTable value="#{file.files}" var="fileBean" border="1" cellpadding="0" cellspacing="0" width="600" style="width: 600px; text-align:center;" bgcolor="#EBACAC" id="data"> <h:column> <f:facet name="header"> <h:outputText value="文件名称"></h:outputText> </f:facet> <h:outputText value="#{fileBean.wjName}"></h:outputText> </h:column><h:column> <f:facet name="header"> <h:outputText value="文件类型"></h:outputText> </f:facet> <h:outputText value="#{fileBean.wjlx.wjlxName}"></h:outputText> </h:column> <h:column> <f:facet name="header"> <h:outputText value="文件大小"></h:outputText> </f:facet> <h:outputText value="#{fileBean.wjSize}"></h:outputText> </h:column> <h:column> <f:facet name="header"> <h:outputText value="操作"></h:outputText> </f:facet> <h:commandButton value="下载" actionListener="#{file.fileDownLoad}"></h:commandButton> </h:column> </h:dataTable> 后台bean的代码是这样public void fileDownLoad(ActionEvent e){ System.out.println("1111111"); UIComponent component = (UIComponent)e.getSource(); UIColumn column = (UIColumn) component.getParent(); HtmlDataTable data =(HtmlDataTable) column.getParent(); int index = data.getRowIndex(); FileBean fileBean = this.files.get(index); String name = fileBean.getWjName(); try { System.out.println("download"); HttpSession session =(HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true); String[] paths = session.getServletContext().getRealPath("/fileLoad").split(""); String path=""; for(int i= 0;i<paths.length;i++){ path = path+paths[i];; } HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); ServletOutputStream servletOutputStream = response.getOutputStream(); name = URLEncoder.encode(name, "UTF-8"); response.setHeader("Content-disposition", "attachment; filename=" + name); response.setContentType("application/x-msdownload;charset=UTF-8"); byte[] b = new byte[1024]; int i = 0; BufferedInputStream br = new BufferedInputStream(new FileInputStream(path+File.separator+name)); while((i = br.read(b))>0){ servletOutputStream.write(b, 0, i); } } catch (Exception e1) { } FacesContext.getCurrentInstance().responseComplete(); }真不知道是怎么错的请指教!!!!!!!!!!!!!!!! 现在要做BBS,求大神帮忙。 使用javascript实现图片滚动 ajax响应好慢 JAVA毕业设计应该注意一些什么问题? jsp中怎么捕获对数据库操作的异常?? 急!!若解决百分相送! 如何用Html,在图片上放按钮? 在hibernate里面sort是关键字吗? 测试机上运行良好,可到了服务器上却总出错... 一个问题 使用jdom如何为XML添加名称空间 hibernate 查询问题。
jsf页面
<h:dataTable value="#{file.files}" var="fileBean" border="1"
cellpadding="0" cellspacing="0" width="600" style="width: 600px; text-align:center;"
bgcolor="#EBACAC" id="data">
<h:column>
<f:facet name="header">
<h:outputText value="文件名称"></h:outputText>
</f:facet>
<h:outputText value="#{fileBean.wjName}"></h:outputText>
</h:column><h:column>
<f:facet name="header">
<h:outputText value="文件类型"></h:outputText>
</f:facet>
<h:outputText value="#{fileBean.wjlx.wjlxName}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="文件大小"></h:outputText>
</f:facet>
<h:outputText value="#{fileBean.wjSize}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="操作"></h:outputText>
</f:facet>
<h:commandButton value="下载" actionListener="#{file.fileDownLoad}"></h:commandButton>
</h:column>
</h:dataTable>
后台bean的代码是这样
public void fileDownLoad(ActionEvent e){
System.out.println("1111111");
UIComponent component = (UIComponent)e.getSource();
UIColumn column = (UIColumn) component.getParent();
HtmlDataTable data =(HtmlDataTable) column.getParent();
int index = data.getRowIndex();
FileBean fileBean = this.files.get(index);
String name = fileBean.getWjName();
try {
System.out.println("download");
HttpSession session =(HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
String[] paths = session.getServletContext().getRealPath("/fileLoad").split("");
String path="";
for(int i= 0;i<paths.length;i++){
path = path+paths[i];;
}
HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
ServletOutputStream servletOutputStream = response.getOutputStream();
name = URLEncoder.encode(name, "UTF-8");
response.setHeader("Content-disposition", "attachment; filename=" + name);
response.setContentType("application/x-msdownload;charset=UTF-8");
byte[] b = new byte[1024];
int i = 0;
BufferedInputStream br = new BufferedInputStream(new FileInputStream(path+File.separator+name));
while((i = br.read(b))>0){
servletOutputStream.write(b, 0, i);
}
} catch (Exception e1) {
}
FacesContext.getCurrentInstance().responseComplete();
}
真不知道是怎么错的
请指教!!!!!!!!!!!!!!!!