[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Definindo o Header  XML
Forum Index -> Comentários Gerais
Author Message
Glaucio


[Avatar]

Joined: 20/07/2005 08:22:57
Messages: 52
Offline

Pessoal,

Estou tentando definir o Header de uma página que minha Action vai chamar, mas não sei como fazer isso.

Eu preciso definir o Header para abrir um relatório em PDF que será gerado pela minha Action.

Como posso fazer isso? Dei um olhada na API parece que existe uma classe chamada StreamConsequence que define o contentType. Mas na documentação está dizendo que existe uma função chamada defineHeader(javax.servlet.http.HttpServletResponse res, Output output) mas ela não foi definida. Seria interessante dar um olhada.

Um abraço!

Glaucio Guerra
RubemAzenha


[Avatar]
Joined: 30/06/2005 23:12:02
Messages: 472
Location: São Paulo, SP
Offline

Glaucio:

Não sei exatamente o que você quer
A StreamConsequence serve para você gerar váriostipos de respostas (geralmente não do tipo text/html) a partir de um vetor de bytes ou uma input stream aberta. Para você gerar relatório PDF vc colocaria algo assim:

Code:
 ActionConfig ac = new ActionCofig("/geraRelatorio", ActionRelatorio.class);
 ac.addConsequence(ActionRelatorio.SUCCESS, new StreamConsequence("application/pdf"));
 //...
 


se estiver errado o content-type de pdf, me corrijam...


Mentawai Developer
[WWW] [MSN]
Glaucio


[Avatar]

Joined: 20/07/2005 08:22:57
Messages: 52
Offline

Eu quero fazer isso:

Code:
 private void processaRelNc(HttpServletRequest req, HttpServletResponse resp) throws IOException
 	{
 		String rnc = req.getParameter("numRnc");
 		String empresa= req.getParameter("empresa");
 		ErrosAplicacao erro= new ErrosAplicacao();
 		erro.setLogger(Logger.getLogger(ServletGeraRelatorio.class));
 		if (rnc==null)
 		{
 			resp.sendRedirect("/relNaoConformidade.jsp");
 			erro.setErro("Valor rnc: "+ rnc, new Exception());			
 		}
 		String CAMINHO_ARQUIVO = "C://Relatorios//";
 		resp.setHeader("Content-disposition","attachment;filename=relRnc.pdf");
 		resp.setContentType("application/pdf");
 		
 		ServletOutputStream out = resp.getOutputStream();	
 			
 		HashMap mp = new HashMap();
 		mp.put("rnc",rnc);
 		JRResultSetDataSource jrRS = null; 
 		AdminNc adm;
 		try {					
 			adm = new AdminNc();
 			jrRS = new JRResultSetDataSource( adm.getDadosRnc(rnc,empresa));
 		}catch (Exception e)
 		{
 			e.printStackTrace();
 			erro.setLogger(Logger.getLogger(ServletGeraRelatorio.class));
 			erro.setErro("Erro ao recuperar dados: ", e);
 		}
 		try{						
 			byte[] bytes = JasperRunManager.runReportToPdf(CAMINHO_ARQUIVO + "relRnc.jasper", mp, jrRS);
 			resp.setContentLength(bytes.length);
 			ServletOutputStream ouputStream = resp.getOutputStream();
 			ouputStream.write(bytes, 0, bytes.length);
 			ouputStream.flush();
 			ouputStream.close();
 			
 		} catch (Exception e) {
 			e.printStackTrace();
 			erro.setLogger(Logger.getLogger(ServletGeraRelatorio.class));
 			erro.setErro("Erro ao gerar relatorio RNC: ", e);
 		}
 	}
 


Dúvida: Como eu pego o outputStream da Action?

Não sei como funciona isso no Mentawai.

Help!

Um abraço!

Glaucio Guerra
saoj



Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline

Glaucio,

O ideal, mais bonito, mais certo e mais tudo é vc criar uma JasperConsequence. Dê uma olhada no source do StreamConsequence. Se vc mandar bem podemos até adicionar o JasperConsequence no build do mentawai.

É claro que vc pode dar um cast no Output para OutputResponse e pegar o HttpServletResponse dentro da action. Mas isso é feio, muito feio. Se fizer assim não mostre pra ninguém...




Sergio Oliveira

 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team