[color=darkblue] Quando passo o caminho do relatório principal, faço o seguinte, criei um map com o nomes e diretório na pasta Web do meu projeto:
[/color]
HashMap map = new HashMap();
map.put(7L, "/report/programas.jrxml");
File reportFile = new File(context.getRequest().getServletRequest().getRealPath(map.get(7L).toString()));
[color=darkblue] Agora minha dúvida é como passar esse path para o “SUBREPORTDIR” que é onde está armazenado o caminho do subrelatório, sendo que como é um relatório Web ele nunca será contante ?
[/color]
[color=darkblue]Criei um outro path para utilizar o subrelatório, passando como parâmetro [/color]
File reportFileT = new File(context.getRequest().getServletRequest().getRealPath("/report/"));
System.out.println("reportFileT : " +reportFileT.getAbsolutePath() +"\\");
HashMap parametros = new HashMap();
parametros.put("SUBREPORT_DIR", reportFileT.getPath() +"\\");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint impressao = JasperFillManager.fillReport(jr, parametros, ds);
Bom Metaleiro eu faço da seguinte forma:
->passo o caminho do sub-report para o relatório principal.
String pathJasper = getServletContext().getRealPath(
"/WEB-INF/reports/")
+ "/"; //caminho onde estão os arquivos . jasper
Map parametros = new HashMap();
parametros.put("CAMINHOSUB", pathJasper + "subrelatorio.jasper");
Onde existe o parametro CAMINHOSUB no relatório pai, certo?
-> insiro o elemento subreport no relatório pai.
-> duplo clique no elemento, e na aba: Sub_relatório(Outro), classe de expressão do sub_relatório java.lang.String, Expressão de sub-relatório : $P{CAMINHOSUB}(o parâmetro passado) e na aba parametros do sub-relatório tem o botão “Copiar do mestre”, que copia todos parametros do relatório principal e passa para o sub.Atenção, lembre-se de criar os parametros do subrelatórios com os mesmos nomes.
Bom eu faço assim e é na WEB. Funciona tanto no servidor como em clientes…
Espero ter ajudado, abraço