Report + SubReport + primefaces

0 respostas
denis_gariglio

Bom dia pessoal .... blz?
Pessoal, tenho um relatorio utilizando iReport q funciona tranquilamente, porem estou com 3 duvidas.
A primeira ... qdo vai salvar o nome sempre fica como null.pdf, como coloco um nome que eu queria?
No Primefaces tem outro modo de exibir um report a não ser utilizando o fileDownload? no struts mandava abrir em outra pagina e gostaria de fazer algo parecido.
Como montar um subreport nessa estrutura minha?
Se alguem tiver alguma ideia e puder ajudar agradeço bastante, abaixo segue o codigo.

Vlwww peossal.

[]s

xhtml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:decorate template="/padrao.xhtml">
	<ui:define name="centro">

		<p:dialog modal="true" widgetVar="statusDialog" header="Status"
			draggable="false" closable="false" resizable="false">
			<p:graphicImage value="/design/ajaxloadingbar.gif" />
		</p:dialog>

		<h:form id="form">

			<p:panel id="grade" header="Dados Grade">
				<p:messages id="msgsGrade" />
				<h:panelGrid id="esc" columns="3">

					<h:outputLabel for="sala" value="Sala: *" />
					<p:selectOneMenu id="sala" value="#{imprimeCartBean.sala}"
						required="true" requiredMessage="Campo Sala é obrigatório"
						style="width:150px;">
						<f:selectItem itemLabel="Selecione uma sala" itemValue="" />
						<f:selectItems value="#{imprimeCartBean.lstSala}" />
					</p:selectOneMenu>
					<p:message for="sala" display="icon" />

				</h:panelGrid>
				<p:separator />
				<div align="right">
					<p:commandButton rendered="true" id="exportar1" value="Exportar"
						ajax="false">
						<p:fileDownload
							value="#{imprimeCartBean.sampleReportPDF}" />
					</p:commandButton>
				</div>
			</p:panel>
		</h:form>

		<script type="text/javascript">
			function start() {
				statusDialog.show();
			}

			function stop() {
				statusDialog.hide();
			}
		</script>

	</ui:define>
</ui:decorate>
</html>

Bean

package escolaonline.ManagedBeans;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import Uteis.Uteis;

import escolaonline.controle.ControleFactory;
import escolaonline.entidades.Aluno;
import escolaonline.entidades.Configuracao;

@ViewScoped
@ManagedBean(name = "imprimeCartBean")
public class ImprimeCartBean {

	/**
	 * Lista com codigo de salas
	 */
	private Map<String, String> lstSala = new HashMap<String, String>();

	/**
	 * Sala selecionada
	 */
	private String sala;

	public Map<String, String> getLstSala() {
		return lstSala;
	}

	public void setLstSala(Map<String, String> lstSala) {
		this.lstSala = lstSala;
	}

	public String getSala() {
		return sala;
	}

	public void setSala(String sala) {
		this.sala = sala;
	}

	public ImprimeCartBean() {

		try {
			boolean ver = Uteis.VerificaSessao();

			if (ver == true) {
				Configuracao conf = RetornaSessaoConfiguracao();// retorna a
																// sessao
																// de
																// configuracao
				Map<String, String>lstSalaSordem = ControleFactory.getInstance().getSalaControle()
						.carregaSalascombo(conf.getConf_ano());
				
				lstSala = Uteis.sortByComparator(lstSalaSordem);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public Configuracao RetornaSessaoConfiguracao() {
		// Retorna a configuracao da sessão
		HttpServletRequest request = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();
		HttpSession session = request.getSession();
		return (Configuracao) session.getAttribute("configuracao");
	}

	public StreamedContent getSampleReportPDF() {

		InputStream relatorio = null;

		try {

			ByteArrayOutputStream out = new ByteArrayOutputStream();

			InputStream stream = ((ServletContext) FacesContext
					.getCurrentInstance().getExternalContext().getContext())
					.getResourceAsStream("/WEB-INF/cart.jasper");

			List<Aluno> listaAlunos = new ArrayList<Aluno>();

			listaAlunos = ControleFactory.getInstance().getAlunoscontrole()
					.listaAlunosPcart(2013, Integer.parseInt(sala));

			JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(
					listaAlunos);
			HashMap<String, Object> params = new HashMap<String, Object>();
			JasperPrint print = JasperFillManager.fillReport(stream, params,
					datasource);

			JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();

			exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
			exporter.exportReport();

			relatorio = new ByteArrayInputStream(out.toByteArray());

		} catch (JRException ex) {
			Logger.getLogger(ImprimeCartBean.class.getName()).log(Level.SEVERE,
					null, ex);
		}

		return new DefaultStreamedContent(relatorio);
	}

	public void imprimeRelatorio() throws IOException, SQLException {

		List<Aluno> listaAlunos = new ArrayList<Aluno>();

		listaAlunos = ControleFactory.getInstance().getAlunoscontrole()
				.listaTodos(2013);

		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
				listaAlunos);

		@SuppressWarnings("rawtypes")
		HashMap parameters = new HashMap();

		try {

			FacesContext facesContext = FacesContext.getCurrentInstance();

			facesContext.responseComplete();

			ServletContext scontext = (ServletContext) facesContext
					.getExternalContext().getContext();

			@SuppressWarnings("unchecked")
			JasperPrint jasperPrint = JasperFillManager.fillReport(
					scontext.getRealPath("/WEB-INF/cart.jasper"), parameters,
					ds);

			ByteArrayOutputStream baos = new ByteArrayOutputStream();

			JRPdfExporter exporter = new JRPdfExporter();

			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

			exporter.exportReport();

			byte[] bytes = baos.toByteArray();

			if (bytes != null && bytes.length > 0) {

				HttpServletResponse response = (HttpServletResponse) facesContext
						.getExternalContext().getResponse();

				response.setContentType("application/pdf");

				response.setHeader("Content-disposition",
						"inline; filename=\"relatorioPorData.pdf\"");

				response.setContentLength(bytes.length);

				ServletOutputStream outputStream = response.getOutputStream();

				outputStream.write(bytes, 0, bytes.length);

				outputStream.flush();

				outputStream.close();

			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}
}
Criado 23 de maio de 2013
Respostas 0
Participantes 1