Olá no richfaces eu utilizo a tag rich:fileUpload para fazer uploads de arquivos, existe alguma tg para eu utilizar no jsf para download de arquivos ?
Abraço
Olá no richfaces eu utilizo a tag rich:fileUpload para fazer uploads de arquivos, existe alguma tg para eu utilizar no jsf para download de arquivos ?
Abraço
Faz um Servlet
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("audio/mpeg3"); //no caso aqui arquivo em mp3 nesse site aqui tem mais
//http://reference.sitepoint.com/html/mime-types-full
byte[] arquivo = // busca o arquivo que você quer
resp.getOutputStream().write(arquivo);
}
e na pagina:
<a href="<link para o servlet>">Download<a>
gustavorozolin mais esse servelet funciona em paralelo com jsf , javabens ?
pois o valor do link vai estar no java bean
abraço
Sim, tranquilo eu tenho aqui um projeto usando JSF 2 e tenho servlet para exibir imagens (byte[]) quer foram gravadas no banco e funciona tudo perfeitamente.
cara eu nunca mexi com Servelet, como eu poderia integrar ele com o jsf ?
por exemplo, o arquivo que eu tenho que baixar ele não é fixo, quando se faz a uma consulta o nome do arquivo que tenho que baixar fica num JavaBean, como eu faço o javaBean se comunicar com o servelet para passar qual arquivo tem que se baixar? eu tb preciso definir ele num faces-config? :oops:
vlw
Vamos lá para receita do bolo
no seu web.xml fica assim:
<servlet>
<servlet-name>Download</servlet-name>
<servlet-class>br.com.meunome.NomeDaClasse</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Download</servlet-name>
<url-pattern>/arquivo/*</url-pattern>
</servlet-mapping>
classe
package br.com.meunome;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="Download",urlPatterns = "/arquivo/*") // caso esteje usando jsf dois colocar isso aqui da não precisa da configuração no web.xml
public class NomeDaClasseextends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -2566545557128926255L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("audio/mpeg3");
String parametro = req.getParameter("nomeArquivo")); // aqui voce consegue pegar o nome do arquivo que vc deseja baixar
byte[] b = //aqui vc coloca o codigo que busca o arquivo(byte[]) com o parametro passado na url
resp.getOutputStream().write(b);
}
}
dai na sua pagina vc faz assim
<a href="/arquivo/<nomeQueVcQuizer>.<extencao>?nomeArquivo=#{meuBean.nomeArquivo}">Download<a>
Qualquer duvida estou a disposição
Abraço
e ai gustavorozolin
cara nessa parte
<a href="/arquivo/<nomeQueVcQuizer>.<extencao>?nomeArquivo=#{meuBean.nomeArquivo}">Download<a>
o seria algo como isso ?
vlw
sim 
e ai gustavorozolin vou tentar explicar o erro, eu criei o link e quando clico nele ele acessa esse link com o seguinte erro
http://localhost/arquivo/<Download>.<jpeg>?nomeArquivo=‘Creek.jpeg’
HTTP Status 404 - /arquivo/%3CDownload%3E.%3Cjpeg%3E
type Status report
message /arquivo/%3CDownload%3E.%3Cjpeg%3E
description The requested resource (/arquivo/%3CDownload%3E.%3Cjpeg%3E) is not available.
JBossWeb/2.0.0.GA_CP
o endereço antigo era:
http://localhost/portal/portal/default/Operacao/Projeto2/Projeto2
JSP: (coloquei o nome estatico so para teste)
<a href="/arquivo/<Download>.<jpeg>?nomeArquivo='Creek.jpeg'">Download</a>
o servelet:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
//import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//@WebServlet(name="Download",urlPatterns = "/arquivo/*") // caso esteje usando jsf dois colocar isso aqui da não precisa da configuração no web.xml
public class Download extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -2566545557128926255L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("image/jpeg");
String parametro = req.getParameter("nomeArquivo"); // aqui voce consegue pegar o nome do arquivo que vc deseja baixar
FileInputStream file = new FileInputStream(new File("C:\\Sun\\jboss-soa-p.4.3.0\\jboss-as\\server\\development\\deploy\\"+parametro));
byte[] b = null;
file.read(b);//aqui vc coloca o codigo que busca o arquivo(byte[]) com o parametro passado na url
resp.getOutputStream().write(b);
}
}
web xml
....
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.resource</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Download</servlet-name>
<servlet-class>alive.Download</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Download</servlet-name>
<url-pattern>/arquivo/*</url-pattern>
</servlet-mapping>
....
Não consegui resolver ainda
e ai gustavorozolin vou tentar explicar o erro, eu criei o link e quando clico nele ele acessa esse link com o seguinte errohttp://localhost/arquivo/<Download>.<jpeg>?nomeArquivo=‘Creek.jpeg’
HTTP Status 404 - /arquivo/%3CDownload%3E.%3Cjpeg%3E type Status report message /arquivo/%3CDownload%3E.%3Cjpeg%3E description The requested resource (/arquivo/%3CDownload%3E.%3Cjpeg%3E) is not available. JBossWeb/2.0.0.GA_CPo endereço antigo era:
http://localhost/portal/portal/default/Operacao/Projeto2/Projeto2JSP: (coloquei o nome estatico so para teste)
<a href="/arquivo/<Download>.<jpeg>?nomeArquivo='Creek.jpeg'">Download</a>o servelet:
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.ServletException; //import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //@WebServlet(name="Download",urlPatterns = "/arquivo/*") // caso esteje usando jsf dois colocar isso aqui da não precisa da configuração no web.xml public class Download extends HttpServlet { /** * */ private static final long serialVersionUID = -2566545557128926255L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("image/jpeg"); String parametro = req.getParameter("nomeArquivo"); // aqui voce consegue pegar o nome do arquivo que vc deseja baixar FileInputStream file = new FileInputStream(new File("C:\\Sun\\jboss-soa-p.4.3.0\\jboss-as\\server\\development\\deploy\\"+parametro)); byte[] b = null; file.read(b);//aqui vc coloca o codigo que busca o arquivo(byte[]) com o parametro passado na url resp.getOutputStream().write(b); } }web xml
.... <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.resource</url-pattern> </servlet-mapping> <servlet> <servlet-name>Download</servlet-name> <servlet-class>alive.Download</servlet-class> </servlet> <servlet-mapping> <servlet-name>Download</servlet-name> <url-pattern>/arquivo/*</url-pattern> </servlet-mapping> ....
Ola,
faltou vc popular o seu byte[] (“b”) antes de mandar a resposta no servlet.