- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个页面允许下载相同的资源(从我的数据库中检索)。
问题是下载只适用于其中的一些,即使使用相同的代码并调用相同的 bean。
这件事变得很烦人,因为在非工作页面上,单击下载链接只会重新加载页面而不会出现任何消息/异常,所以我不知道发生了什么。
这是我的 BEAN 代码:
package ManagedBeans;
import ejb.DispensaManagerLocal;
import entity.Dispensa;
import entity.Utente;
import java.io.ByteArrayInputStream;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.RateEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
/**
*
* @author stefano
*/
@ManagedBean
@RequestScoped
public class DispensaBean {
@EJB
private DispensaManagerLocal dispensaManager;
@ManagedProperty(value = "#{loginBean.utente}")
private Utente utente;
public Utente getUtente() {
return utente;
}
public void setUtente(Utente utente) {
this.utente = utente;
}
/**
* Creates a new instance of DispensaBean
*/
public DispensaBean() {
}
public StreamedContent getDownload() {
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("dispensaId");
System.out.println("________" + id);
Dispensa d = dispensaManager.findById(Integer.parseInt(id));
String type = getMimeFromByte(d.getDatiFile());
String estensione = "";
if(type.equals("application/pdf")){
estensione = ".pdf";
} else if(type.equals("application/zip")) {
estensione = ".zip";
} else if(type.equals("application/vnd.ms-powerpoint")) {
estensione = ".ppt";
}
return new DefaultStreamedContent(new ByteArrayInputStream(d.getDatiFile()), type, d.getTitolo() + estensione);
}
private String getMimeFromByte(byte[] src) {
if (src[0] == 0x25 && src[1] == 0x50 && src[2] == 0x44 && src[3] == 0x46) {
return "application/pdf";
}
if (src[0] == 0x50 && src[1] == 0x4b) {
return "application/zip";
}
if (src[0] == 0xd0 && src[1] == 0xcf && src[2] == 0x11 && src[3] == 0xe0 && src[4] == 0xa1 && src[5] == 0xb1 && src[6] == 0x1a && src[7] == 0xe1) {
return "application/vnd.ms-powerpoint";
}
return "application/octet-stream";
}
}
现在,在非工作页面上,不会调用 getDownload()
方法,因为它不会打印任何内容。
这是下载按钮代码
<h:form style="float: right">
<pou:commandLink id="downloadDispensa" ajax="false" disabled="#{!loginBean.logged}">
<pou:graphicImage value="./resources/images/download.png" height="30"/>
<pou:fileDownload value="#{dispensaBean.getDownload()}"/>
<f:param name="dispensaId" value="#{dispensa.id}"/>
</pou:commandLink>
</h:form>
我注意到下载链接只是重新加载页面而不是调用方法,这只发生在 #{dispensa.id}
依赖于 GET 参数的页面中.
例如,我有一个名为 dispensa.xhtml
的页面,如果没有传递 GET 参数,它会显示我在数据库中的所有文件。
事实上,dispensa.xhtml?id=5
将只显示 id=5 的文件。
在第一种情况下,单击下载链接没有问题。在第二种情况下这样做会重新加载页面并丢失 GET 参数,因此它将加载 dispensa.xhtml
而不是 dispensa.xhtml?id=5
。
我认为使用 GET 参数存在一些问题,但是..昨天它起作用了,我没有更改这段代码!
另一个非工作页面是 ricerca.xhtml
,它显示了 ricerca.xhtml?key=query
给出的查询的(多个)结果。
最后,搞砸了,profile.xhtml?user=username
中的下载工作。
这破坏了我关于 GET 参数的整个理论。
为了避免出现空的 byte[] datiFile
,我以这种方式编辑了我的 Dispensa
实体:
@Basic(optional = true, fetch=FetchType.EAGER)
@Lob
@Column(name = "datiFile")
private byte[] datiFile;
我不知道该怎么办,因为它没有说明出了什么问题,它只是重新加载页面,绕过了我的下载!
编辑:
我已经尝试更改我的 getDownload()
方法以返回我 HD 上的 File
,以了解问题是否是由硬盘上的空数据引起的db 但它仍然没有像我说的那样工作!
最佳答案
似乎我使用替代解决方案解决了这个问题。
我都改了
<h:form style="float: right">
<pou:commandLink id="downloadDispensa" ajax="false" disabled="#{!loginBean.logged}">
<pou:graphicImage value="./resources/images/download.png" height="30"/>
<pou:fileDownload value="#{dispensaBean.getDownload()}"/>
<f:param name="dispensaId" value="#{dispensa.id}"/>
</pou:commandLink>
</h:form>
到
<h:form style="float: right">
<h:outputLink id="downloadDispensa" disabled="#{!loginBean.logged}" target="_blank" value="./download.xhtml?id=#{dispensa.id}">
<pou:graphicImage value="./resources/images/download.png" height="30"/>
</h:outputLink>
</h:form>
download.xhtml
有这段代码:
<script type="text/javascript">
if(document.referrer == "" || document.referrer == "download.xhtml"){
self.location='./index.xhtml';
}
document.onblur = new Function('self.close()');
</script>
<h:body onload="document.getElementsByClassName('downloadDispensa')[0].click();" rendered="#{loginBean.logged}">
<h:form>
<h:commandLink class="downloadDispensa" id="downloadDispensa" style="display: none">
<pou:graphicImage value="./resources/images/download.png" height="30"/>
<pou:fileDownload value="#{dispensaBean.download}"/>
<f:param name="dispensaId" value="#{request.getParameter('id')}"/>
</h:commandLink>
</h:form>
</h:body>
<h:body onload="self.location='./index.xhtml';" rendered="#{!loginBean.logged}">
</h:body>
因此它加载下载页面,自动点击下载链接,并在显示下载对话框时自动关闭页面。
关于jsf - 未调用 PrimeFaces fileDownload 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563108/
我正在使用jquery文件下载.. 代码如下: function downloadFile(){ var downloadOptions = { preparingMessageHtml: "We
我使用 jquery.filedownload 来创建需要时间的文件。 有取消/停止下载的方法/命令吗? 喜欢 var myDownload = $.fileDownload(myUrl, { ...
我在我的项目中使用 PrimeFaces 作为网络技术。我有一个注册表,用户自己注册。在该表格中,用户还可以附加一些文档。目前没有问题。但是当用户填写表格并附上一些文件时,用户可以通过下载查看附件。为
在 vaadin 7 中,使用 FileDownloader 时如何延迟确定文件名? final Button downloadButton = new Button("Download file")
众所周知,我们必须使用按钮扩展 FileDownloader 才能下载文件。 // Button downloadButton = new Button("download"); private vo
这就是我所拥有的: $(document).ready(function() { $(document).on("click", "a.fileDownloadSimp
我有多个页面允许下载相同的资源(从我的数据库中检索)。 问题是下载只适用于其中的一些,即使使用相同的代码并调用相同的 bean。 这件事变得很烦人,因为在非工作页面上,单击下载链接只会重新加载页面而不
我有 Vaadin 7 代码可以让用户选择下载文件: Button btnDownloadResults = new Button("Download Results", FontAwes
我正在使用 Primefaces 文件下载。当我第一次启动应用程序时,文件已下载,但每次我按下下载按钮时,都会出现此错误: java.lang.IllegalStateException: getOu
我得到了一个返回文件夹所有文件的数据表,可以使用 primefaces p:filedownload 资源下载该文件。 它工作正常,但是当加载代码时我无法修改文件,因为 FileInputStream
如何检测 fileDownloader 是否完成导出 csv 文件: 这是我实现下载按钮的部分 Button downloadButton = new Button("Download");
我尝试过在 Vaadin7 中使用新的 FileDownloader。不幸的是,它需要一个 AbstractComponent 作为“扩展”组件(它监听点击) 有没有办法将它与组合框项目一起使用?因为
我正在尝试下载一个简单的.pdf 文件我已经尝试过日志,但没有错误,也没有任何内容。我尝试调试,但直到昨天它仍然像魅力一样工作,但今天不行,我没有对这部分代码进行任何更改。我基于 SO 的这个问题和答
我正在尝试实现一个功能,在单击事件时下载文件,并在文件下载完成时关闭 UI 对话框。问题是,在 $preparingFileModal.dialog({ modal: true }) 之后,代码不再触
我使用的是 PrimeFaces 3.1.2、NetBeans 7.2、JSF 2.1 和 GlassFish 3.1.2。 我正在使用从 http://www.primefaces.org/show
我正在使用 fileDownload jQuery 插件下载使用 ASP.NET MVC 提供的文件。该操作用 HttpGet 修饰并返回 FilePathResult。当找到文件时它会起作用。如果找
我在数据表中有一个 fileDownload 组件,但是当我单击它时,似乎在 setPropertyActionListener 设置 datlis.filepath 变量之前调用了 filedown
我有一个简单的文件下载控件,其中我必须禁止删除附件。该选项无效,用户看到图标(垃圾吨)并且无法成功删除附件。 一个错误?我是否误解了某事? 谢谢,乌韦 最佳答案 我也无法证实这一点。在我的测试系统(
使用 Vaadin manual 中的代码我们有: Button downloadButton = new Button("Download image"); FileDownloader fileD
对我的 tomcat 安装执行的安全扫描报告了这个问题: fileDownloaded cookie 通过安全连接发送,但未设置“安全”属性。 “secure”属性告诉浏览器只通过受 SSL 保护的连
我是一名优秀的程序员,十分优秀!