Duvidas iReport

1 resposta
A

Fala galera, sou novato em java e estou tentando gerar um relatorio com iReport.
Aqui no forum achei um post q fez o mesmo gerar sem problemas porem ao gerar o mesmo só é liberado para download e com o nome null.pdf
Gostaria que o relatorio aparecesse no navegador e com um nome qualquer diferente de nulo.
Estou utilizando jsf + primefaces, segue meu codigo abaixo:

meu xhtml

<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>

meu Bean

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();

		}

	}

Tenho mais uma duvida mais fica para o proximo post ... vlwww

1 Resposta

T

tenta exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, “nome_diferente_de_null_aqui”);

Criado 22 de março de 2013
Ultima resposta 26 de set. de 2013
Respostas 1
Participantes 2