为什么我在jsf页面中写文件的下载的时候,点击下载按钮的时候只是刷新页面,而没有做任何的事情/有知道的高手请指点

解决方案 »

  1.   

    我的代码是这样的:
    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();
    }
    真不知道是怎么错的
    请指教!!!!!!!!!!!!!!!!