JSF : générer un fichier à partir d’un managed bean

By , 18/05/2011

Dans cet exemple, je vais générer un fichier Excel à partir d’un managed bean.

L’idée de base est de récupérer le context de la servlet pour créer une réponse et rediriger l’utilisateur vers cette dernière. Voici à quoi ressemble mon bean :

@Model
public class MonBean {

	public String execute() throws IOException {
		// Création du fichier excel :
		String fileName = "azerty.xls";
		HSSFWorkbook wb = new HSSFWorkbook();
		HSSFSheet sheet = wb.createSheet(fileName);
		HSSFHeader header = sheet.getHeader();
		header.setCenter(fileName);

		// Récupération de la réponse HTTP
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
		response.setContentType("application/vnd.ms-excel");
		response.setHeader("Content-disposition", "attachment; filename="+ fileName);

		// Ecriture de la réponse
		ServletOutputStream out = response.getOutputStream();
		wb.write(out);
		out.close();

		FacesContext.getCurrentInstance().responseComplete();

		return null;
	}
}

Ensuite, il suffit de demander la méthode execute() du bean.

<h:form>
        <h:commandButton action="#{monBean.execute}" value="download" />
</h:form>

Vous pouvez trouver le code source de cet exemple ici. Pour exécuter l’exemple il faut lancer la commande mvn compile tomcat:run et se diriger vers l’adresse http://localhost:9090/home.jsf

Leave a Reply


five − = 3

OfficeFolders theme by Themocracy