我正在尝试使用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没有推动。
答案 0 :(得分:2)
Okey,Primefaces和IcePush并不总是一起工作。从我的项目中删除IceFaces Push使下载工作但没有推送。
所以我决定自己编写Push,只使用Primefaces。
答案 1 :(得分:0)
如果在getFile方法中放置断点,那么file == null?
问题可能是你的班级构造不好