Prendre un FacesContext, extraire l'objet response de son external context. Faire revenir la response en la castant en HttpServletResponse. Ajouter quelques headers http (pour le nom du fichier), un type mime (pour le comportement du navigateur). Ajoutez un flux quelconque (généré à la volée ou lue a partir d'un fichier selon les goûts), et retirez immédiatement (responseComplete) pour éviter les ennuis.
Compilez, déployez et savourez ...
En mode intelligible ça donne ceci :
public void doTestStream(ActionEvent ae) throws IOException
{
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext ec = context.getExternalContext();
HttpServletResponse response = (HttpServletResponse) ec.getResponse();
response.reset();
response.setContentType("application/csv");
response.setHeader("Content-Disposition", "filename=Demo.csv");
response.setHeader("Content-Transfer-Encoding", "binary");
ServletOutputStream sop = response.getOutputStream();
sop.write("hello;csv;world".getBytes());
sop.flush();
context.responseComplete();
}
2 commentaires:
salut
une question pourquoi ta mis cette méthode void ..avec un ActionEvent
pour l'appeler avec un actionListener
si oui peut on invoker cette méthode avec un simple action ??
Je pense que tu dois pouvoir utiliser une simple action de backbean.
Enregistrer un commentaire