我尝试上传文件,处理它然后下载。我可以上传它,内部过程进展顺利但是当我尝试下载时没有任何反应。
点击上传按钮后,我的下载按钮呈现。如果我不隐藏下载按钮,我可以毫无问题地下载文件。
问题可能在于渲染属性。
XHTML
<p:fileUpload
fileUploadListener="#{portabilidadIPTV.upload}"
allowTypes="/(\.|\/)(xls?x)$/"
sizeLimit="100000"
description="Seleccione un archivo"
invalidFileMessage="Tipo de archivo inválido"
fileLimit="1"
messageTemplate="Seleccione un archivo válido"
label="Elegir archivo"
uploadLabel="Portar"
cancelLabel="Cancelar"
invalidSizeMessage="El tamaño de archivo debe ser menor a 90 KB"
fileLimitMessage="Sólo puede cargar un archivo"
update="resultados"/>
<h:panelGroup id="resultados">
<p:commandButton
value="Descargar"
ajax="false"
icon="ui-icon-arrowthick-1-s"
rendered="#{portabilidadIPTV.portabilidadRealizada}">
<p:fileDownload value="#{portabilidadIPTV.archivoDescargado}" />
</p:commandButton>
</h:panelGroup>
托管bean
@ManagedBean(name="portabilidadIPTV")
public class PortabilidadIPTV implements Serializable{
private static final long serialVersionUID = 1L;
private UploadedFile archivo;
private File archivoCargado;
private boolean portabilidadRealizada;
@PostConstruct
public void init(){
setPortabilidadRealizada(false);
}
// Download File
public StreamedContent getArchivoDescargado() {
File archivo = new File("examplePath"); //some path
DefaultStreamedContent dsc = null;
try {
InputStream stream = new FileInputStream(archivo);
dsc = new DefaultStreamedContent(stream, "text/plain","Portabilidad_Resultados.xlsx");
} catch (Exception e) {
e.printStackTrace();
}
return dsc;
}
// Getters & Setters
public boolean isPortabilidadRealizada() {
return portabilidadRealizada;
}
public void setPortabilidadRealizada(boolean portabilidadRealizada) {
this.portabilidadRealizada = portabilidadRealizada;
}
}