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…
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
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());
}
até ai eu sei…
Mas eu gostaria de saber se existe uma solução para este problema… tipo uma configuração…
você usa JSF 1.2? ou 1.1?
1.1
poderia você explicar melhor esse problema?
sinceramente não consegui entender…
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…
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();
?
Eis o problema ta passando null… no “facesContext”
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
ele não acha o getExternalContext()
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();
}
}
Cara Testei Aqui 100% isso que eu precisava… Valeu…
Agradeço a todos pela ajuda…