Socorro, povo!

7 respostas
M

Galera, tudo blz?

Então, etou tentando gerar um relatório em um arquivo pdf e em seguida abri-lo dentro do browser onde está a aplicação. Só que não estou conseguindo. Olhando o logo do Tomcat, vi que sempre está surgindo a seguinte msg:

Cannot forward after response has been committed

Alguém, por favor, poderia me dizer ou me dar uma dica do que poderia estar causando isto?

Agradeço a ajuda!!!

7 Respostas

F

Seu código fonte ajudaria muito nessas situações.

pcalcado

O Flin tah certo, mas:

1 - Não escreva nada na saída antes de fazer um forward (provavelmente eh isso)

2 - Coloque um título mais a ver com seu tópico

[]s

M
Certo, senhores!!!

Tem razão

Mas a história é a seguinte.

Eu tenho, baseado em um select no banco, um resultSet que me resulta em um arquivo PDF. Depois disso, eu preciso mostrá-lo no browser,  que está o meu problema não consigo!!!

Aqui vai o código:

if (rset != null) {

while (rset.next()){

if (ctLinhas > 40){

documento.newPage();

ctLinhas = 6;

linha = “------------------------------------------------------” +

“-----------------------------------------------------------------------------”;

documento.add(new Paragraph(linha));

vetor.addElement(linha);

linha = rset.getString(“nome”)+

"                                       (CNPJ: " +

rset.getString(“cnpjf”) +

")                           " +

"Data: " ;

documento.add(new Paragraph(linha));

vetor.addElement(linha);

linha = “Razao Analitico " + "                      " + " Da Loja: " + razaoAnaliticoForm.getCodigoUnidadeInicial()+ A " +

razaoAnaliticoForm.getCodigoUnidadeFinal() + " Periodo de " + razaoAnaliticoForm.getDataInicial() + " A " +

razaoAnaliticoForm.getDataFinal() + "              Pagina: " + ctPagina++ ;

documento.add(new Paragraph(linha));

vetor.addElement(linha);

linha = "Da Conta: " + razaoAnaliticoForm.getContaContabilInicial() + "                                A " + razaoAnaliticoForm.getContaContabilFinal() +

"                       ";

documento.add(new Paragraph(linha));

vetor.addElement(linha);

linha = “------------------------------------------------------” +

“-----------------------------------------------------------------------------”;

documento.add(new Paragraph(linha));

linha = “<em>- Data -</em> Loja    Lote  *  Docto  * <em>------------------ Historico -----------</em> C.P. <em>– Debito –</em> <em>– Credito –</em> <em>— Saldo —</em>”;

documento.add(new Paragraph(linha));

vetor.addElement(linha);

}

if (!flagcontactb) {

linha = rset.getString(“cd_cta_ctb”) + "     " + rset.getString(“cd_empr”)+ "    " + rset.getString(“descr_conta”) ;

documento.add(new Paragraph(linha));

vetor.addElement(linha);

flagcontactb = true;

ctaCtbil = rset.getString(“cd_cta_ctb”);

}

if (rset.getString(“debito”).equals(“t”)){

vlrDebito = Double.parseDouble(rset.getString(“v_lancto”));

vlrCredito = 0.00;

totDebitoCta =+ vlrDebito;

totDebitoUnid =+ totDebitoCta;

} else if (rset.getString(“credito”).equals(“t”)){

vlrCredito = Double.parseDouble(rset.getString(“v_lancto”));

vlrDebito = 0.00;

totCreditoCta  =+ vlrCredito;

totCreditoUnid =+ totCreditoCta;

}

linha = rset.getString(“dt_lancto”) + "  + rset.getString(cd_unid)+ +rset.getString(n_lote)+ "+ rset.getString(“n_docto”) +

"  " + rset.getString(“descr_hist”) + "  "+ rset.getString(“cd_red_crt_part”) + "  "+vlrDebito + "  + vlrCredito+  "+vlrSaldo;

documento.add(new Paragraph(linha));

vetor.addElement(linha);

ctLinhas++;

}
}
//            PdfProcessor processor = new PdfProcessor(vetor, baos);

//      a partir daqui, não sei mais o que fazer!!!   :shocked!:

documento.close();

if(!documento.equals(null)) {

response.setContentType(application/pdf);

response.setContentLength(baos.size());

response.sendRedirect(razao.pdf);

response.setHeader(Content-disposition, " inline; filename=razao.pdf");

ServletOutputStream sos = response.getOutputStream();

baos.writeTo(sos);

//send all bytes to the client.

sos.flush();

return mapping.findForward(success);

}

else {

response.setContentType(text/html);

return mapping.findForward(failure);

}

}

Obrigado, povo!!!

Luca

Olá

Quando você colocou Socorro fiquei com vontade de lhe passar o telefone do Resgate. Nâo o fiz porque não sei se aí no Paraná é o mesmo número que aqui.

Mas agora que você postou o código ficou mais fácil. Quer dizer, teria ficado mais fácil se o código fosse identado. Sugiro que leia rapidinho aqui.

Sobre seu problema, sugiro que dê uma estudada sobre o que faz realmente response.sendRedirect(“razao.pdf”); porque acho que isto aqui está meio deslocado.

[]s
Luca

M

LUca, estou aos poucos consertando… vamos tentar mais uma vez!!!
Tirei aquele response.Redirect, ok?

Mas o problema não é devido a esse comando.

if &#40;rset != null&#41; &#123;
               while &#40;rset.next&#40;&#41;&#41;&#123;
                if &#40;ctLinhas &gt; 40&#41;&#123;
                   documento.newPage&#40;&#41;;
                   ctLinhas = 6;
                   linha = "------------------------------------------------------" +
                        "-----------------------------------------------------------------------------";
                   documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                   vetor.addElement&#40;linha&#41;;
                   linha = rset.getString&#40;"nome"&#41;+
                        "                                       &#40;CNPJ&#58; " +
                        rset.getString&#40;"cnpjf"&#41; + 
                        "&#41;                           " +
                        "Data&#58; " ;
                   documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                   vetor.addElement&#40;linha&#41;;
                   linha = "Razao Analitico " + "                      " + " Da Loja&#58; " + razaoAnaliticoForm.getCodigoUnidadeInicial&#40;&#41;+" A " +
                         razaoAnaliticoForm.getCodigoUnidadeFinal&#40;&#41; + " Periodo de " + razaoAnaliticoForm.getDataInicial&#40;&#41; + " A " + 
                         razaoAnaliticoForm.getDataFinal&#40;&#41; + "              Pagina&#58; " + ctPagina++ ;
                   documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                   vetor.addElement&#40;linha&#41;;
                   linha = "Da Conta&#58; " + razaoAnaliticoForm.getContaContabilInicial&#40;&#41; + "                                A " + razaoAnaliticoForm.getContaContabilFinal&#40;&#41; +
                        "                       ";
                   documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                   vetor.addElement&#40;linha&#41;;
                   linha = "------------------------------------------------------" +
                          "-----------------------------------------------------------------------------";
                   documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                   linha = "*- Data -* Loja    Lote  *  Docto  * *------------------ Historico -----------* C.P. *-- Debito --* *-- Credito --* *--- Saldo ---*";
                   documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                   vetor.addElement&#40;linha&#41;;                   
              &#125;
              if &#40;!flagcontactb&#41; &#123;
                 linha = rset.getString&#40;"cd_cta_ctb"&#41; + "     " + rset.getString&#40;"cd_empr"&#41;+ "    " + rset.getString&#40;"descr_conta"&#41; ;
                 documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
                 vetor.addElement&#40;linha&#41;;                 
                 flagcontactb = true;
                 ctaCtbil = rset.getString&#40;"cd_cta_ctb"&#41;;
              &#125;
              if &#40;rset.getString&#40;"debito"&#41;.equals&#40;"t"&#41;&#41;&#123;
                   vlrDebito = Double.parseDouble&#40;rset.getString&#40;"v_lancto"&#41;&#41;;
                   vlrCredito = 0.00;
                   totDebitoCta =+ vlrDebito;
                   totDebitoUnid =+ totDebitoCta;
              &#125; else if &#40;rset.getString&#40;"credito"&#41;.equals&#40;"t"&#41;&#41;&#123;
                        vlrCredito = Double.parseDouble&#40;rset.getString&#40;"v_lancto"&#41;&#41;;
                        vlrDebito = 0.00;
                        totCreditoCta  =+ vlrCredito;
                        totCreditoUnid =+ totCreditoCta;
                   &#125;
               linha = rset.getString&#40;"dt_lancto"&#41; + "  "+ rset.getString&#40;"cd_unid"&#41;+" "+rset.getString&#40;"n_lote"&#41;+" "+ rset.getString&#40;"n_docto"&#41; +
                           "  " + rset.getString&#40;"descr_hist"&#41; + "  "+ rset.getString&#40;"cd_red_crt_part"&#41; + "  "+vlrDebito + "  "+ vlrCredito+"  "+vlrSaldo;
               documento.add&#40;new Paragraph&#40;linha&#41;&#41;;
               vetor.addElement&#40;linha&#41;;               
               ctLinhas++;
               &#125;

            &#125;
            
//            PdfProcessor processor = new PdfProcessor&#40;vetor, baos&#41;;
            
            documento.close&#40;&#41;;
            if&#40;!documento.equals&#40;null&#41;&#41; &#123;
              response.setContentType&#40;"application/pdf"&#41;;
              response.setContentLength&#40;baos.size&#40;&#41;&#41;;
              response.setHeader&#40;"Content-disposition", " inline; filename=razao.pdf"&#41;;
              ServletOutputStream sos = response.getOutputStream&#40;&#41;;
              baos.writeTo&#40;sos&#41;;
             //send all bytes to the client.
              sos.flush&#40;&#41;;
              return mapping.findForward&#40;"success"&#41;;
           &#125; 
           else &#123;
              response.setContentType&#40;"text/html"&#41;;
              return mapping.findForward&#40;"failure"&#41;;
          &#125;                   
        &#125;
        catch&#40;DocumentException de&#41;&#123;
            de.printStackTrace&#40;&#41;;
        &#125;
        catch&#40;IOException ioe&#41;&#123;
            ioe.printStackTrace&#40;&#41;;
        &#125;
        catch&#40;SQLException e&#41;&#123;
            e.printStackTrace&#40;&#41;;
        &#125;
        finally&#123;
            
        &#125;
        return mapping.findForward&#40;"failure"&#41;;

:oops:
Acho q agora melhorou, não?

Luca

Olá

Já havia tentado responder ontem à noite mas meu Firefox travou.

Melhorou MUITO!

Experimente usar

response.setContentType(“text/pdf”);							

ao invés de

response.setContentType(“application/pdf”);

[]s
Luca

M

galera
o meu codigo está assim:

response.setContentType("text/html");
		response.setContentType("application/pdf");		
		response.setContentLength(bytesQuadro.length);			
		response.getOutputStream().write(bytesQuadro, 0, bytesQuadro.length);
		response.getOutputStream().flush();
		response.getOutputStream().close();
so que eu to com o problema,

o nome titulo da pagina quando abre o pdf no browser fica o action.do, como faço para alterar isso

ja tentei

response.setHeader(title”,“oioi);

response.addHeader(title”,“oioi);

e nada…

abraços

Criado 18 de outubro de 2004
Ultima resposta 1 de nov. de 2007
Respostas 7
Participantes 5