Duvida Jasper...no uso JasperViewer em rodar no client?

Olá,

estou usando conforme abaixo o JasperViewer só roda no servidor
alguém teria um exemplo de usar no client ???

se alguém puder me ajudar agradeceria…

abs


    JasperReport relatoriosJasper    =       (JasperReport)JRLoader.loadObject(jasperURL);  
              JasperPrint jasperPrint =        JasperFillManager.fillReport(relatoriosJasper, parameters, con);  
              JasperViewer jrViewer = new JasperViewer(jasperPrint, false);  
              jrViewer.setTitle("WYZ");  
              jrViewer.setDefaultCloseOperation(jrViewer.DISPOSE_ON_CLOSE);  
              jrViewer.show();  

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.

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

Esse cliente que vc está usando é uma jsp, o que é?

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;

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.

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 ???

Isso mesmo.