Acessar Diretório Estático JSF

8 respostas
gRoOve

Sempre que tento acessar um diretório estático ocorre erro 404, dentro da raíz da minha aplicação tenho um diretório que salvo relatórios assim:

/TurismoGuiado/relatorios/relatorio.pdf

No netbeans está assim:
Não deveria acessar normalmente?

8 Respostas

Hebert_Coelho

Através de qual código você está tentando chegar ao arquivo pdf?

gRoOve

Desse:

private void preenchePdf(JasperPrint print) throws JRException {
		// Pego o caminho completo do PDF desde a raiz
		saida = "/home/kauan/NetBeansProjects/TurismoGuiado/relatorios/relatorio.pdf";
		// Exporto para PDF
		JasperExportManager.exportReportToPdfFile(print, saida);

		/* Jogo na variável saída o nome da aplicação mais o caminho para o PDF.Essa variável será utilizada pela view*/
		saida = "/home/kauan/NetBeansProjects/TurismoGuiado/relatorios/relatorio.pdf";
	}

Tentei direto pelo navegador tb:

http://localhost:8080/TurismoGuiado/relatorios/relatorio.pdf
gRoOve

Alguém sabe dizer por que ocorre este erro?

Hebert_Coelho

Cara, não sei não.

Uma coisa que me veio a mente, é se na hora do deploy o netbenas está enviando a pasta relatoórios para o servidor.

E

Como você esta gerando o seu relatório?
Já utilizei assim, mas acho melhor você gera o relatório e depois exibir o PDF no navegador
temho um método assim:

public void executarRelatorioPagamento(ActionEvent action)
			throws ParseException {

		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) context
				.getExternalContext().getResponse();

		InputStream reportStream = context.getExternalContext()
				.getResourceAsStream("/relatorio/relatoriopagamento.jasper");

		response.setContentType("application/pdf");

		try {
			ServletOutputStream servletOutputStream = response
					.getOutputStream();

			Map<String, Object> map = new HashMap<String, Object>();
			map.put("datainicial", dateInicial);
			map.put("datafinal", dateFinal);

			List dados = new ArrayList();

			Map record = null;

			List listaDado = getListaRelatorioPacPag();

			int size = listaDado.size();

			for (int i = 0; i < size; i++) {
				Object[] o = (Object[]) listaDado.get(i);
				record = new HashMap();
				Double conv = Double.parseDouble(o[1].toString());
				Double valor = Double.parseDouble(o[4].toString());
				record.put("paciente", o[0].toString());
				record.put("valorPago", Double.parseDouble(o[3].toString()));
				record.put("telefone", o[2].toString());
				record.put("valor", conv * valor);

				dados.add(record);
			}

			JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(
					dados);

			JasperRunManager.runReportToPdfStream(reportStream,
					servletOutputStream, map, fonteDados);

			servletOutputStream.flush();
			servletOutputStream.close();

		} catch (JRException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			context.responseComplete();
		}
	}

E o botão que aciona o método

<h:commandLink  value="Imprimir"
					actionListener="#{consultaController.executarRelatorioPagamento}"
					target="_blank" id="link">
				</h:commandLink>

Com isso eu o pdf será exibindo em um nova pagina ou aba.
Espero que ajude.

gRoOve

jakefrog:
Cara, não sei não.

Uma coisa que me veio a mente, é se na hora do deploy o netbenas está enviando a pasta relatoórios para o servidor.


E como eu verifico isso? Não sei que tipo de implantação é feito, mas no diretório webapps não existe o diretório da minha aplicação "/

Hebert_Coelho

gRoOve:
jakefrog:
Cara, não sei não.

Uma coisa que me veio a mente, é se na hora do deploy o netbenas está enviando a pasta relatoórios para o servidor.


E como eu verifico isso? Não sei que tipo de implantação é feito, mas no diretório webapps não existe o diretório da minha aplicação "/
Quanto a isso não tenho como te ajudar. =/ Eu saco de netbeans ou glassfish! =/

Sorry

gRoOve

Edson Donizete:
Como você esta gerando o seu relatório?
Já utilizei assim, mas acho melhor você gera o relatório e depois exibir o PDF no navegador
temho um método assim:

InputStream reportStream = context.getExternalContext()
				.getResourceAsStream("/relatorio/relatoriopagamento.jasper");


Cara, meu problema ocorre bem aqui…como na imagem em anexo, eu criei o diretório “relatorios” dentro da raíz da aplicação e coloquei meus relatórios .jrxml e .jasper lá dentro, mas quando tento acessar da forma que você passou não encontra "/
Não sei por que acontece isso, se é configuração do tomcat ou netbeans ou sei lá o que…
Eu segui o tutorial do davidbuzatto aqui para criação do diretório, será que é isso mesmo?

Criado 5 de maio de 2012
Ultima resposta 7 de mai. de 2012
Respostas 8
Participantes 3