Paulo_Nepomuceno 17 de abr. de 2009
Esse mesmo código roda perfeitamente se estiver sendo executado no cliente (no caso de ser um client Swing, claro). Copy and paste. Nesse caso você poderia preencher o JRDataSource com dados vindos do servidor por exemplo.
Abraços.
paribe 17 de abr. de 2009
mas porque com esse codigo eu rodo em outra
máquina :
entro na aplicação e pesso o relatório e tela do JasperViewer aparece na tela do servidor , por que isso ???
abs
Paulo_Nepomuceno 17 de abr. de 2009
Esse cliente que vc está usando é uma jsp, o que é?
paribe 17 de abr. de 2009
sim a saida é um jsp …
mas mostra no servidor porque será ???
vou postar o codigo novamente pois está sendo executado dentro action do struts …
String host = "http://" + request . getServerName () + ":" + request . getServerPort ();
// inicio trata imagem
try {
locationImage = request . getContextPath () + "/files/rel.jpg" ;
} catch ( Exception ex ){
locationImage = null ;
}
parameters . put ( "imagem_dir" , host + locationImage );
// fim trata imagem
session = ( Session ) dbmanager . getDelegate ();
con = session . connection ();
String jasper = request . getContextPath () + "/report/report/" + nomeRelatorio ;
host = "http://" + request . getServerName () + ":" + request . getServerPort ();
URL jasperURL = new URL ( host + jasper );
JasperReport relatoriosJasper = ( JasperReport ) JRLoader . loadObject ( jasperURL );
JasperPrint jasperPrint = JasperFillManager . fillReport ( relatoriosJasper , parameters , con );
JasperViewer jrViewer = new JasperViewer ( jasperPrint , false );
jrViewer . setTitle ( "XXX" );
jrViewer . show ();
jrViewer . setDefaultCloseOperation ( jrViewer . DISPOSE_ON_CLOSE );
} catch ( Throwable ex ) {
retorno = INPUT ;
this . getClass (). getCanonicalName (), "checkReport()" );
} finally {
if ( dbmanager != null )
dbmanager . close ();
}
this . dtoReport . setAcao ( "PARAMETRO" );
this . dtoReport . setId ( this . dtoReport . getId ());
return retorno ;
Paulo_Nepomuceno 17 de abr. de 2009
Substitua essa parte do seu código:
JasperViewer jrViewer = new JasperViewer(jasperPrint, false);
jrViewer.setTitle("XXX");
jrViewer.show();
jrViewer.setDefaultCloseOperation(jrViewer.DISPOSE_ON_CLOSE);
Por essa:
byte [] buffer = JasperExportManager . exportReportToPdf ( jasperPrint );
if ( buffer != null ) {
response . setContentType ( "application/pdf" );
response . setDateHeader ( "Expires" , 0 );
response . setContentLength ( buffer . length );
response . setHeader ( "Content-Disposition" , "inline; filename= \"\" " );
OutputStream os = response . getOutputStream ();
os . write ( buffer , 0 , buffer . length );
os . flush ();
os . close ();
}
Assim vai funcionar.
Agora para você esclarecer essas dúvidas é melhor se eprofundar um pouco no estudo da arquitura de aplicações Cliente X Servidor . Estuda a apostila da Caelum FJ-21.
Abraços.
paribe 17 de abr. de 2009
Obrigado pelo retorno.
Eu tinha feito dessa forma o usuário quer uma solução onde não precise do software Adobe e dessa forma
que você passou para abrir na pagina jsp precisa do software.
Por isso fui pra solução de usar JasperViewer e cai na hora de apresenta a tela dele só sai no servidor ???
Essa é minha duvida ???
Paulo_Nepomuceno 22 de abr. de 2009