caros,
eis o seguinte:
venho tentado imprimir um relatório gerado em jsp e consegui pensar em duas maneiras de montar a página de impressão:
1 - repetindo a pesquisa, montando a página novamente e sem as partes dinspensáveis, tal como cabeçalhalho. (funciona, mas pesquisa 2 vezes)
2 - inserindo o conteúdo da pesquisa em uma div, abrindo uma nova janela e mandando escrever o innerhtml desta div. (monta a página, mas na hora de imprimir, na tela não aparecem erros, mas a impressão sai a tela de debug do tomcat…
************************************************************
error reading request, ignored - java.lang.arrayindexoutofboundsexception
at org.apache.tomcat.service.http.httprequestadapter.parseheaderfiled(httprequestadapter.java:224)
at org.apache.tomcat.service.http.httprequestadapter.readheaders(httprequestadapter.java:205)
at org.apache.tomcat.service.http.httprequestadapter.readnextrequest(httprequestadapter.java:140)
at org.apache.tomcat.service.http.httpconnectionhandler.processconnection(httpconnectionhandler.java:195)
at org.apache.tomcat.service.tcpworkerthread.runit(pooltcpendpoint.java:416)
at org.apache.tomcat.util.threadpool$controlrunnable.run(threadpool.java:498)
at java.lang.thread.run(thread.java:484)
…
*****************************************************
pelo que pude observar, ao mandar imprimir, por algum motivo ele chama novamente a pesquisa e dá pau na impressão. por que? não sei.
eis a diferença dos métodos:
1 - duas pesquisas:
/*************
este método roda o jsp novamente e monta a página sem exibir cabeçalho e rodapé.
*/
<script language="J A V A S C R I P T">
function executa()
{
relatorio = window.open(´/controle_fc/servlet/controle_fc/relattfcporlcomrmcp?acao=imprime&mlocal=<%=mlocal%>&hlocal=<%=hlocal%>´,
´impressao´, ´width=700,left=50,toolbar=no,location=no,status=yes,menubar=no,scrollbars=yes,resizable=yes´);
relatorio.focus();
}
</script>
<table width="680" border="0" cellpadding="2" cellspacing="0" align="center" name="obs">
<tr>
<td>
<div align="right">
<a onclick="executa()" class="mao">versão para imprimir</a>
</div>
</td>
</tr>
</table>
2 - uma pesquisa:
<div align="center">
<a href="#" onclick="executa()">versão para imprimir</a>
</div>
<script language="J A V A S C R I P T">
function executa()
{
cabecalho = "<html>n <head>n <title>tresc - controle de flash-cards</title>n <meta http-equiv=´content-type´ content=´text/html; charset=iso-8859-1´>"+
"n <link rel=stylesheet href=´/padrao.css´ type=´text/css´ >n </head>n <body leftmargin=´0´ topmargin=´0´ marginwidth=´0´ marginheight=´0´>"+
"n <a name=´topo´></a>n <br>n <h2 align="center">quantidade de flash-cards por localização<br> com responsável, marca, capacidade e patrimônio</h2>n <br>";
conteudotabela = document.all.tabela.innerhtml;
botoes = "n <p> </p>"+
"n <div align=´center´ id="icones">"+
"n
<img src=´/modelo/nivel3/impressora.gif´ onclick="mostra(icones, ´hidden´);" class=´mao´>
<img src=´/modelo/nivel3/porta.gif´ onclick="window.close()" class=´mao´>"+
"n </div>"+
"n <div align=´center´ id="mostra" onmouseover="mostra(icones, ´visible´)">"+
"n "+
"n </div>";
scriptbotoes = document.all.script.innerhtml;
estilo = document.all.staile.innerhtml;
rodape = "blabla"
conteudo = cabecalho + conteudotabela + "<p>" + botoes + scriptbotoes + estilo + rodape;
destino = window.open(´´, nome, ´propriedades´);
destino.document.write( conteudo );
destino.focus();
}
</script>
é bastante coisa pra ler, mas espero que entendam e possam ajudar.
qualquer coisa, é só responder: <a>[email removido]</a>
obs.: já tentei enviar a pesquisa por parametro e por atributo, ambos dão erro de index no array.
Impressão + Tomcat + JSP
5 Respostas
Olá,
Pq vc não mantém a lista na seção e usa a primeira solução?
Assim não precisa fazer uma nova consulta.
Pra ser sincero, não fiz isso porque não sei.
Se puderes me ensinar, fico grato 
Att.
Renato Back
Se alguém vier a ficar curioso, consegui resolver o problema da impressão com JavaBeans.
Mas fica a curiosidade…
Sempre que eu mandava imprimir e ia dar errado, no spool de impressão aparecia o endereço da página "http://localhost:8080/…"
Já quando funcionava e imprimia, no spool mostrava o título da página "teste".
Se alguém imaginar o motivo, favor postar.
[]s
Renato Back
oi renato,
deixa ver se eu entendi:
qdo dava erro o texto q deveria ser impresso, aparecia no prompt do tomcat?
se for isto, eu não faço a mínima idéia, do motivo.
pelo q vc postou na primeira msg, eu acho q o a mensagem q aparecia no promot, era a stacktreace da exeção gerada, certo?
bom, se for isto. tá tudo normal.
Sobre manter a lista na seção: Usar JavaBeans é uma ótima solução mas, caso vc não estivesse usando, podia fazer direto no JSP da seguine forma:
<%
session.setAttribute("nomdeDaLista" , lista);
%>
Na próxima página, é só pegar a lista:
<%
Collection list = session.getAttribute("nomdeDaLista" );
%>
você está azendo a impressão via J A V A S C R I P T?
Abraço
Franklin Samir
[ Esta mensagem foi editada por: Franklin em 22-03-2003 13:01 ]
Daí Samir,
Sim, a impressão era por J A V A S C R I P T. O famoso "window.print()"
O prompt que eu estava falando era o spool de impressão. Sabe quando vai imprimir e aparece uma impressora no systray ? Pois é, quando eu abria o gerenciamento de impressão, o nome do documento era como eu descrevi no post anterior.
A saída do session parece ser uma boa, pena que não pensei nisso antes de ficar fuçando nos JavaBeans.
Valeu pela ajuda.
[]s
Renato Back