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?
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?
Através de qual código você está tentando chegar ao arquivo pdf?
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
Alguém sabe dizer por que ocorre este erro?
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.
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.
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.
Quanto a isso não tenho como te ajudar. =/ Eu saco de netbeans ou glassfish! =/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 "/
Sorry
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");