Posts tagged: Excel

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

Seam : Exporter une dataTable à l’interieure d’une subview

By , 30/09/2010

Lorsqu’un développeur utilise Seam, il a à sa disposition tout un panel de composant pour l’aider à développer. Par exemple le composant dataTable Exporter permet d’exporter un tableau JSF (h:dataTable, rih:dataTable, etc.) sous la forme d’un fichier Excel. Voici la syntaxe directement récupérée de la documentation de référence de Seam :

<h:form id="theForm">
    <h:dataTable id="theDataTable" value="#{personList.personList}"
        var="person">
         ...
    </h:dataTable>
</h:form>
...
<h:commandLink
    value="Export"
    action="#{excelExporter.export('theForm:theDataTable')}" />

Lorsque la table se trouve dans une sous vue (<f:subview/>) ou tout autre composant qui joue un rôle de conteneur de nom (NamingContainer), il faut que le paramètre de la méthode d’export soit sous la forme idNamingContainer1:idNamingContainer2:…:…:idDataTable. De cette manière, la table est identifiée de façon unique dans la RootView.

OfficeFolders theme by Themocracy