FacesContext.getCurrentInstance()

13 respostas
marcoamv3000

Caros amigos estou com um problema eu tenho um método que possui este parametro para eu receber FacesContext.getCurrentInstance() mas se eu fizer com uma pagina jsp normal ele passa null e quando eu uso o modo designer do netbeans ele funciona perfeitamente alguem saberei como resolver este problema…

13 Respostas

Leozin

olha não sei se isso vai funcionar, mas acredito que ele esteja vindo nulo porque a página que você está chamando não está no contexto jsf

ou seja, há diferença entre você chamar index.jsp e index.jsf por exemplo

Fer

Tive um problema parecido e espero que te ajude…

Eu precisava carregar um popup para que usuário pudesse escolher o local para ser salvo um arquivo.

FacesContext currentInstance = FacesContext.getCurrentInstance(); OutputStream os = getHttpServletResponse(currentInstance).getOutputStream();

Aqui resolveu o NullPointerException

public HttpServletResponse getHttpServletResponse(FacesContext currentInstance) { return ((javax.servlet.http.HttpServletResponse) currentInstance.getExternalContext().getResponse()); }

marcoamv3000

até ai eu sei…
Mas eu gostaria de saber se existe uma solução para este problema… tipo uma configuração…

Leozin

você usa JSF 1.2? ou 1.1?

marcoamv3000

1.1

Leozin

poderia você explicar melhor esse problema?

sinceramente não consegui entender…

marcoamv3000
package web2;

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;   
import javax.swing.JOptionPane;
  
public class Download {   
  
    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(fullFileName); // 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) {   
            JOptionPane.showMessageDialog(null,"Erro no download do arquivo: " + ex.getMessage());   
            ex.printStackTrace();   
        }   
    }   
}

Este método faz o download de um arquivo…
e possui este parametro “FacesContext facesContext” mas se eu fizer com uma pagina jsp normal ele passa null e quando eu uso o modo designer do netbeans ele funciona perfeitamente…

Leozin

o.O

caramba!

bom, deixa eu ver

tu já tentou tirar esse FacesContext do parâmetro e, nessa linha

ExternalContext context = facesContext.getExternalContext();

trocar para

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();

?

marcoamv3000

Eis o problema ta passando null… no “facesContext”

Leozin

você não entendeu o que eu quis dizer no último post?

TIRA o FacesContext do teu parâmetro e chama ele dentro do método e veja se ainda tá retornando nulo

abraço

marcoamv3000

ele não acha o getExternalContext()

H

Bom dia!!!

Pode fazer o seguinte:

No lugar de passar o FacesContext passa para HttpServletResponse response;

E dei uma melhorada nesse codigo seu porque não iria funcionar para web.

public static synchronized void downloadFile(String filename, String fileLocation, String mimeType, HttpServletResponse response) {   
  
        //ExternalContext context = facesContext.getExternalContext(); // Context   
        String path = fileLocation; // Localizacao do arquivo   
        String fullFileName = path + filename;   
        //File file = new File(fullFileName); // Objeto arquivo mesmo :)   
    URL url=null; 
        URLConnection conn=null;
      //  File file = new File(fullFileName);  // Objeto arquivo mesmo :)   
        
        
       try {
        url=new URL(fullFileName);
        conn=url.openConnection();
           
        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.setContentLength((int) conn.getContentLength()); // O tamanho do arquivo
        response.setContentType(mimeType); // e obviamente o tipo   
  
           
            
            InputStream in = conn.getInputStream();  //new FileInputStream(file);   
            OutputStream out = response.getOutputStream();   
  
            byte[] buf = new byte[(int) conn.getContentLength()];  
            int count;   
            while ((count = in.read(buf)) >= 0) {   
                out.write(buf, 0, count);   
            }
            
            in.close();   
            out.flush();   
            out.close();   
            
    //    facesContext.responseComplete();   
        } catch (IOException ex) {   
            JOptionPane.showMessageDialog(null,"Erro no download do arquivo: " + ex.getMessage());   
            ex.printStackTrace();   
        }   
    }
marcoamv3000

Cara Testei Aqui 100% isso que eu precisava… Valeu…
Agradeço a todos pela ajuda…

Criado 18 de fevereiro de 2008
Ultima resposta 18 de fev. de 2008
Respostas 13
Participantes 4