index.zul
<zk>
<window
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.zk.examples.vm.UploadDownloadVM')"
title="${labels.app.titleWindow}"
position="center"
mode="overlapped"
border="normal"
width="300px"
height="200px">
<button
label="${labels.app.upload}"
upload="true,maxsize=8192"
onUpload="@command('uploadFile',upload=event)"
autodisable="self" />
<button
label="${labels.app.download}"
mold="trendy"
onClick="@command('downloadFile')"
disabled="@bind(empty vm.media)" />
</window>
</zk>
- En "viewModel" se inicializa la clase java que se va a encargar de procesar los eventos que necesitemos, mediante el binder.
- En "onUpload" se ase uso de la anotación @command para hacer referencia al método "uploadFile" en la clase UploadDownloadVM la cual se encargará se guardar el archivo en el servidor.
- En onClick="@command('downloadFile')" se captura el evento clic del botón para descargar el archivo.
- En disabled="@bind(empty vm.media)" mediante la anotación @bind, nos aseguramos que el botón descarga estará deshabilitado hasta que se le notifique que el objeto media contenga el archivo.
Por último la clase que se encarga de procesar los eventos que están en el archivo index.zul.
UploadDownloadVM.java
package com.zk.examples.vm;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.util.media.Media;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.event.UploadEvent;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Messagebox;
import com.zk.examples.util.Util;
public class UploadDownloadVM {
private Media media;
@NotifyChange("media")
@Command
public void uploadFile(@ContextParam(ContextType.TRIGGER_EVENT) UploadEvent event) {
media = event.getMedia();
if(Util.uploadFile(media))
Messagebox.show(Labels.getLabel("app.successfull"));
else
Messagebox.show(Labels.getLabel("app.error"));
}
public Media getMedia(){
return media;
}
@Command
public void downloadFile(){
if(media != null)
Filedownload.save(media);
}
}
- En @NotifyChange("media"), esta de más mencionar que se notifica el método getMedia() que el archivo se ha subido al servidor y que el objeto media lo contiene, por lo tanto el binder manda el aviso y el botón descargar en su propiedad disabled es notificado que no está vacio y por lo tanto se habilita para poder descargar el archivo. Cabe mencionar que el desarrollador se encarga de extender esta lógica a su gusto, este ejemplo es meramente ilustrativo.
- public void uploadFile(@ContextParam(ContextType.TRIGGER_EVENT) UploadEvent event) este método contiene un parámetro de tipo UploadEvent, el cual es pasado a este desde el archivo index.zul.
- public void downloadFile(), Descargamos el archivo mediante la clase Filedownload con el método estático save. Esta clase no solo se limita a usar objetos de tipo Media. Para mayor información consulte en el API de ZK, la documentación completa acerca de esta clase.
Las librerias de zk las puedes descargar desde este enlace, solo incluye las librerias en la carpeta lib de tu proyecto:
http://www.zkoss.org/download/zk
Ejemplo completo:
uploadDownload.zip
Importante: Este ejemplo esta probado en Eclipse con tomcat 7 por lo tanto puedes importar el proyecto en tu eclipse y adaptarlo al servidor de tu preferencia.
Que buenos ejemplos los que tenes por aqui en este blog, lastima que ya no seguiste sibiendo mas, me ayudaron de mucho los ejemplos que pusiste aqui. Gracias.
ResponderEliminarQue buenos ejemplos los que tenes por aqui en este blog, lastima que ya no seguiste sibiendo mas, me ayudaron de mucho los ejemplos que pusiste aqui. Gracias.
ResponderEliminarHola como estan? Quiero descargar un archivo pdf donde lo estoy intentando con un String
ResponderEliminarEste es mi codigo
public void print() {
String fileName = getEjSelected().getTerminal().toString();
fileName += "-" + getEjSelected().getOperator().toString();
fileName += "-" + getEjSelected().getTrx().toString() + ".pdf";
Filedownload.save(getEjSelected().getTrxData().getBytes(), "application/pdf", "ejemplo.pdf");
}
Cuado lo intento descargar como txt me lo descarga sin problemas pero asi como esta, me lo descarga pero no me deja abrirlo. Me dice que el archivo esta dañado
Espero puedan ayudarme