Boa Tarde, Pessoal estou com um problema para carregar as informações no jasperreports.
Trabalho com o netbeans 5.5, firebird e jasperreports 1.3.1. Estou desenvolvendo uma aplicação para internet e agora preciso fazer os relatórios.
Peguei um artigo no site da netbeans.org sobre como gerar relatórios em pdf a partir de uma aplicação web.
O problema é que ele no final de tudo o meu relatório não mostra os dados. Somente o cabeçalho e o título.
Vou falar o que eu fiz.
1 - Criei um select na minha classe. Este é o select:
SELECT CAST(TAR.ID_TAREFA AS VARCHAR(8)) AS CODIGO FROM TAREFA TAR INNER JOIN FORMULARIO FOM ON TAR.ID_FORMULARIO = FOM.ID_FORMULARIO WHERE TAR.ID_TAREFA = 1
e pedi para ele colocar o resultado em um objeto CachedRowSetXImpl.
2 - Depois criei o meu arquivo jrxml com os design do meu relatório.
3- Conforme a apostila explicou no meu applicationbeans1 eu coloquei o código para chamar o relatório. Veja abaixo o código fonte:
public void jasperReport(String name, String type,
ResultSet data, Map params) {
// Validar que reconhecemos o tipo de relatório
// antes de perder tempo potencialmente preenchendo
// o relatório com dados
boolean found = false;
for (int i = 0; i < VALID_TYPES.length; i++) {
if (VALID_TYPES[i].equals(type)) {
found = true;
break;
}
}
if (!found) {
throw new IllegalArgumentException("Invalid report type '"
+ type
+ "' requested");
}
// Procurar recurso de design de relatório compilado
ExternalContext econtext = getExternalContext();
InputStream stream = econtext.getResourceAsStream(PREFIX + name
+ SUFFIX);
if (stream == null) {
throw new IllegalArgumentException("Unknown report name '"
+ name
+ "' requested");
}
try {
data.beforeFirst();
} catch (Exception e) {
throw new FacesException(e);
}
// Preencha o relatório solicitado com os dados especificados
JRResultSetDataSource ds = new JRResultSetDataSource(data);
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(
stream, params, ds);
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
} finally {
try {
stream.close();
} catch (IOException e) {
;
}
}
// Configurar o exportador a ser usado, junto com os parâmetros
// personalizados específicos do tipo de exportador
JRExporter exporter = null;
HttpServletResponse response = (HttpServletResponse)
econtext.getResponse();
FacesContext fcontext = FacesContext.getCurrentInstance();
try {
response.setContentType(type);
if ("application/pdf".equals(type)) {
exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,
response.getOutputStream());
} else if ("text/html".equals(type)) {
exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,
response.getWriter());
// Tornar imagens disponíveis para a saída HTML
HttpServletRequest request =
(HttpServletRequest)
fcontext.getExternalContext().getRequest();
request.getSession().setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
exporter.setParameter(
JRHtmlExporterParameter.IMAGES_MAP, new HashMap());
// A seguinte instrução requer mapeamento / imagem
// para o imageServlet no web.xml.
//
// Este servlet serve imagens, incluindo imagens px
// para espaçamento.
//
// Sirva as imagens diretamente para não
// incorrermos em tempo extra associado a
// a uma solicitação JSF para uma entidade não-JSF.
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
request.getContextPath() + "/image?image=");
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
}
// Basta de preliminares ...
// exportar o relatório
try {
exporter.exportReport();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new FacesException(e);
}
// Dizer a JavaServer Faces que nenhuma saída é necessária
fcontext.responseComplete();
}
4 - Criei um botão na minha pagina, coloquei o código para chamar a função jasperReport conforme a apostila e mandei rodar. O relatório em pdf abrir sem as informações do banco só as informações estáticas.
Não sei o que aconteceu parece que ele não está carregando os dados. já confirmei, o meu objeto CachedRowSetXImpl tem os dados do banco.
Será que alguém sabe o que pode estar acontecendo?
Se alguém puder me ajudar eu agradeço.
Obrigada pela atenção.
Sheila