d1v*_*van 5 jsf file-upload primefaces
p:来自p的filedownload:使用ViewScoped托管bean的datatable不起作用.它调用prepareFile和getFile方法两次.在我提到的方法的第一次调用中,它设置了表中的第一个文件,并且在方法的第二次调用中它设置了正确的文件,但它总是只下载第一个文件,而第二个文件永远不会下载.
为什么要打两次电话?为什么要从表中设置第一个文件?有任何想法吗?
这是我的代码:
<p:dataTable id="offer_attachment_datatable"
widgetVar="offer_attachment_datatable"
var="attachment"
value="#{offerBean.offerAttachments}">
<p:column>
<f:facet name="header"/>
<p:commandLink ajax="false" actionListener="#{offerBean.prepareFile(attachment)}" title="#{attachment.name}">
<p:graphicImage value="/resources/themes/navigator_b2e/images/drive-download.png" />
<p:fileDownload value="#{offerBean.file}"/>
</p:commandLink>
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
并在托管bean(简化)中:
private StreamedContent file;
private InputStream stream;
public void prepareFile(OfferAttachment attachment){
System.out.println("Attachment: "+attachment.getName());
stream = new ByteArrayInputStream(attachment.getAttachment());
file = new DefaultStreamedContent(stream, "text/plain", attachment.getName());
stream = null;
}
public StreamedContent getFile() {
System.out.println("File: "+file.getName());
return file;
}
public void setFile(StreamedContent file) {
this.file = file;
}
Run Code Online (Sandbox Code Playgroud)
所以,我用一个简单的p:confirmDialog做了一个解决方法,在那里我提取了有问题的ajax = false命令链接,所以我通过在p:datatable中单击它来选择附件并从p:confirmdialog执行下载.
好吧,伙计们,我用一个简单的 p:confirmDialog 做了一个解决方法,在其中提取了有问题的 ajax=false 命令链接,所以我通过在 p:datatable 中单击附件来选择附件,然后从 p:confirmdialog 执行下载。
归档时间: |
|
查看次数: |
5358 次 |
最近记录: |