JSF : générer un fichier à partir d’un managed bean
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