Criar Link no Button

5 respostas
marcoamv3000

Galera seguinte estou usando o modo designer do netbeans para fazer meu layout mas eu preciso saber como fazer com que um button quando clicado apresente a tela de download. O arquivo que eu preciso oferecer para download é um pdf.

Meu JSP:

<ui:button action="#{Pag1_WEB2.BT_PDF_action}" binding="#{Pag1_WEB2.BT_PDF}" id=“BT_PDF” style=“position: absolute; left: 72px; top: 48px” text=“Abrir PDF”/>

Meu .java:



public void BT_PDF_action() {

// Código de como oferecer o pdf como download

}


Precisa ser button!!!

5 Respostas

B

Olá,

VocÊ pode usar a seguinte classe para fazer download de arquivos:
aí no seu método: BT_PDF_action() basta você chamar OperacoesArquivos.downloadFile(…);

Espero ter ajudado
Att

import java.io.File;   
import java.io.FileInputStream;   
import java.io.IOException;   
import java.io.OutputStream;   
import javax.faces.context.ExternalContext;   
import javax.faces.context.FacesContext;   
import javax.servlet.http.HttpServletResponse;   
  
public class OperacoesArquivos {   
  
    public static synchronized void downloadFile(String filename, String fileLocation, String mimeType,   
                                                 FacesContext facesContext) {   
  
        ExternalContext context = facesContext.getExternalContext(); // Context   
        String path = fileLocation; // Localizacao do arquivo   
        String fullFileName = path + filename;   
        File file = new File(path); // Objeto arquivo mesmo :)   
  
        HttpServletResponse response = (HttpServletResponse) context.getResponse();   
        response.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\""); //aki eu seto o header e o nome q vai aparecer na hr do donwload   
        response.setContentLength((int) file.length()); // O tamanho do arquivo   
        response.setContentType(mimeType); // e obviamente o tipo   
  
        try {   
            FileInputStream in = new FileInputStream(file);   
            OutputStream out = response.getOutputStream();   
  
            byte[] buf = new byte[(int)file.length()];   
            int count;   
            while ((count = in.read(buf)) >= 0) {   
                out.write(buf, 0, count);   
            }   
            in.close();   
            out.flush();   
            out.close();   
        facesContext.responseComplete();   
        } catch (IOException ex) {   
            System.out.println("Error in downloadFile: " + ex.getMessage());   
            ex.printStackTrace();   
        }   
    }   
}
marcoamv3000

Sou novo em java e não entendi bem os parametros principalmente o FacesContext:
Você pode poderia me passar um exemplo de chamada…

downloadFile(String filename, String fileLocation, String mimeType, FacesContext facesContext)

B

FacesContext representa o contexto de processamento de uma requisição dentro do JSF e fornece acesso ao ambiente de aplicação web através de um ExternalContext.

um exemplo de chamada seria:

OperacoesArquivos.downloadFile(“nomeArquivo”,“c:\diretorioArquivo”,“txt”,FacesContext.getCurrentInstance());

marcoamv3000
Apenas uma pequena correção no código:

Esta linha deve ser alterada:

File file = new File(path);

e ficar assim:

File file = new File(fullFileName);

Só isso…
Muito Obrigado pela ajuda funcionou perfeito e obrigado pela explicação…

B

blz…
qq coisa estamos aí …

att

Criado 22 de janeiro de 2008
Ultima resposta 23 de jan. de 2008
Respostas 5
Participantes 2