Primefaces fileDownload JavaScript Error

时间:2012-05-10 06:52:50

标签: jsf primefaces icefaces

我正在尝试使用Primefaces fileDownload组件下载文件。不幸的是它不起作用。我只得到一个Javascript错误“[窗口]响应不包含XML数据”

我正在使用带有Primefaces 3.2的JSF 2.1.6,使用IceFaces Push版本2.0.2来推送数据,以及使用Spring版本3.1.0的一些Spring函数。全部在Tomcat 6.0.33上运行。

我的xHtml代码的片段

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">
<h:body>
 <p:layout> 
   ...
   <p:layoutUnit id="east" ... >
     <h:form id="eForm">
       <p:dataTable ... >
         ...
           <p:row >
             <p:column style="font-weight: bold;">Attach 1:</p:column>
               <p:column>
                 <p:commandLink id="attach1" value="Download" ajax="false" immediate="true">
                      <p:fileDownload value="#{data.file}" />
                    </p:commandLink> 
                  </p:column>
                </p:row>
       </p:dataTable>
     </h:form>
    ...
 </p:layout>
</h:body>

FileDownload Bean

@ManagedBean(name = "data")
@RequestScoped
public class FileDownload {

private StreamedContent file;

public FileDownload() {
    InputStream stream = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/resources/images/phone_speaker_x24.png");
    file = new DefaultStreamedContent(stream, "image/jpg", "downloaded_optimus.jpg");
}

public StreamedContent getFile() {
    return file;
}
}

FireBug的错误

 [window] the response does not contain XML data  bridge...9208334 (Zeile 1217)
 [window] Error [status: emptyResponse code: 200]: An empty response was received from the server. Check server error logs.

Tomcat日志中没有错误

修改

Icefaces就是问题所在。删除所有Icefaces Libs下载工作正常。但没有IceFaces没有推动。

2 个答案:

答案 0 :(得分:2)

Okey,Primefaces和IcePush并不总是一起工作。从我的项目中删除IceFaces Push使下载工作但没有推送。

所以我决定自己编写Push,只使用Primefaces。

答案 1 :(得分:0)

如果在getFile方法中放置断点,那么file == null?

问题可能是你的班级构造不好