pessoal vocês são minha ultima esperança segui esses tuto:
http://today.java.net/pub/a/today/2006/02/09/file-uploads-with-ajax-and-jsf.html
http://www.patternizando.com.br/2011/04/upload-com-primefaces/
http://quebrandoparadigmas.com/?p=168
a simplesmente não sei se funciona tipo assim ele "faz o upload " mas ele não guarda nem na pasta temporária
mas
por favor me ajudem como faço upload com JSF e salvar o caminho na base de dados ou pelo menos numa pasta reservada no projeto mesmo
tipo assim no exemplo tem uma classe assim:
package controllers;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
/**
*criado em 06/07/2010
* @author wagnerborges
*/
@ManagedBean
@SessioScoped
public class FileUploadController {
private String nomeArquivoSelecionado;
private StreamedContent imagem;
public StreamedContent getImagem() {
return imagem;
}
public void setImagem(StreamedContent imagem) {
this.imagem = imagem;
}
public String getNomeArquivoSelecionado() {
return nomeArquivoSelecionado;
}
public void setNomeArquivoSelecionado(String nomeArquivoSelecionado) {
this.nomeArquivoSelecionado = nomeArquivoSelecionado;
}
public void fileUploadAction(FileUploadEvent event) {
try {
setNomeArquivoSelecionado(event.getFile().getFileName());
imagem = new DefaultStreamedContent(event.getFile().getInputstream());
} catch (IOException ex) {
Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
e a página JSF:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<title>Upload de Arquivos com primefaces</title>
</h:head>
<h:body>
<h:form>
<p:fileUpload auto="false" label="Selecionar..." allowTypes="*.jpg;*.png;*.gif;" multiple="false" description="Imagem" update="idarquivo,idimagem" fileUploadListener="#{fileUploadController.fileUploadAction}" /> <br/>
Arquivo selecionado: <h:outputText id="idarquivo" value="#{fileUploadController.nomeArquivoSelecionado}"/>
<br/><br/>
<p:graphicImage id="idimagem" value="#{fileUploadController.imagem}" />
</h:form>
</h:body>
</html>
segundo o cara ele só mostra isso acontece mas
eu quero salvar ela numa pasta junto do projeto e salvar esse caminho no banco
dai eu achei esse fragmento:
public void processFileUpload(FileUploadEvent event) throws IOException {
try {
//Cria um arquivo UploadFile, para receber o arquivo do evento
UploadedFile arq = event.getFile();
InputStream in = new BufferedInputStream(arq.getInputstream());
//copiar para pasta do projeto
File file = new File("D://doc//" + arq.getFileName());
//O método file.getAbsolutePath() fornece o caminho do arquivo criado
//Pode ser usado para ligar algum objeto do banco ao arquivo enviado
caminho = file.getAbsolutePath();
FileOutputStream fout = new FileOutputStream(file);
while (in.available() != 0) {
fout.write(in.read());
}
fout.close();
FacesMessage msg = new FacesMessage("O Arquivo ", file.getName() + " salvo.");
FacesContext.getCurrentInstance().addMessage("msgUpdate", msg);
} catch (Exception ex) {
ex.printStackTrace();
}
}
mas não faço a minima ideia onde e como coloca-lo
alguém pode me ajudar
por favor valeu
Vc adicionou as bibliotecas necessárias?
sim as commons-fileupload1.1 e commons-io.jar
mas onde eu coloco a ultimo trecho de código?
ajustei o web.xml
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class> org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
bem como no exemplo
Bocchi
Dezembro 8, 2011, 9:36pm
#4
Amigo coloque esse código que vc encontrou, no seu método fileUploadAction. O resto parece que ta tudo ok.
Revivendo o tópico …
Estou com um problema parecido . O método descrito no fileUploadListener não é chamado .
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
AVISO: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo dynamiccontent. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
INFO: Skipping call to libraryExists(). Please set context-param com.sun.faces.enableMissingResourceLibraryDetection to true to verify if library http://java.sun.com/jsf/composite/exporter actually exists
Alguém me dá uma força ?
tenho um aqui uso assim
web.xml
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>51200</param-value>
</init-param>
<init-param>
<param-name>uploadDirectory</param-name>
<param-value>C:\arquivos</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
bean
package br.com.projeto.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import br.com.projeto.beans.Arquivos;
import br.com.projeto.dao.HibernateDao;
@SessionScoped
@ManagedBean
public class ArquivosBean implements Serializable {
private static final long serialVersionUID = 1L;
private Arquivos arquivo = new Arquivos();
private List<Arquivos> arquivos = new ArrayList<Arquivos>();
@SuppressWarnings("unused")
private StreamedContent file;
public String fileUploadAction(FileUploadEvent event) throws IOException {
try {
arquivo.setNome(event.getFile().getFileName());
byte[] conteudo = event.getFile().getContents();
String caminho = "C:\\arquivos\\" + event.getFile().getFileName();
FileOutputStream fos = new FileOutputStream(caminho);
fos.write(conteudo);
fos.close();
HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
arquivo.setCaminho(caminho);
arquivo.setTamanho(conteudo.length);
String nomeArquivo = arquivo.getNome();
int e = nomeArquivo.lastIndexOf(".");
arquivo.setTipo(nomeArquivo.substring(e));
hibernateDao.salvar(arquivo);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Arquivo Salvo!", arquivo.getNome()));
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
} finally {
arquivo = new Arquivos();
arquivos = new ArrayList<Arquivos>();
file = null;
}
return "Arquivos.xhtml";
}
public List<Arquivos> getListArquivos() {
HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
arquivos = hibernateDao.getBeans();
return arquivos;
}
public void remove() {
try {
HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
Integer id = arquivo.getId();
arquivo = hibernateDao.getBean(id);
new File(arquivo.getCaminho()).delete();
hibernateDao.deletar(arquivo);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Arquivo Deletado!", arquivo.getNome()));
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", " " + e));
} finally {
arquivo = new Arquivos();
arquivos = new ArrayList<Arquivos>();
file = null;
}
}
public StreamedContent getFile() throws FileNotFoundException {
HibernateDao<Arquivos> hibernateDao = new HibernateDao<Arquivos>(Arquivos.class);
Integer id = arquivo.getId();
arquivo = hibernateDao.getBean(id);
String caminho = arquivo.getCaminho();
FileInputStream stream = new FileInputStream(caminho);
return file = new DefaultStreamedContent(stream, caminho, arquivo.getNome());
}
public void setFile(StreamedContent file) {
this.file = file;
}
public Arquivos getArquivo() {
return arquivo;
}
public void setArquivo(Arquivos arquivo) {
this.arquivo = arquivo;
}
public List<Arquivos> getArquivos() {
return arquivos;
}
public void setArquivos(List<Arquivos> arquivos) {
this.arquivos = arquivos;
}
}
jsf
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Arquivos</title>
</h:head>
<h:body>
<h:form enctype="multipart/form-data" update=":form:display">
<p:growl id="messages" />
<div align="center">
<p:panel header="Arquivos" style="width:1050px">
<ui:include src="/paginas/Menu.xhtml" />
<p:fileUpload fileUploadListener="#{arquivosBean.fileUploadAction}"
update="display" multiple="true" />
<br />
´
<p:dataTable var="arquivos" value="#{arquivosBean.listArquivos}"
widgetVar="arquivosTable"
emptyMessage="Nenhum arquivos Encontrado Nessas Condições"
rowStyleClass="#{empty rowIx or rowIx
mod 2 ne 0 ? 'even-row' : 'odd-row'}"
rowIndexVar="rowIx" id="display" rows="30">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Procurar em todos os campos:" />
<p:inputText id="globalFilter" onkeyup="arquivosTable.filter()" />
</p:outputPanel>
</f:facet>
<p:column filterBy="#{arquivos.id}" headerText="Código" footerText="Código"
filterMatchMode="contains" style="width: 40px">
<h:outputText value="#{arquivos.id}" style="width: 40px" />
</p:column>
<p:column filterBy="#{arquivos.nome}" headerText="Descrição"
footerText="Descrição" filterMatchMode="contains">
<h:outputText value="#{arquivos.nome}" />
</p:column>
<p:column filterBy="#{arquivos.tipo}" headerText="Tipo"
footerText="Tipo" filterMatchMode="contains" style="width: 40px">
<h:outputText value="#{arquivos.tipo}" style="width: 40px" />
</p:column>
<p:column filterBy="#{arquivos.tamanho}" headerText="Tamanho"
footerText="Tamanho" filterMatchMode="contains"
style="width: 140px">
<h:outputText value="#{arquivos.tamanho}" style="width: 140px" />
</p:column>
<p:column style="width:100px">
<h:panelGrid columns="2" styleClass="actions" cellpadding="2">
<p:commandButton image="ui-icon-disk" title="Download"
ajax="false">
<f:setPropertyActionListener value="#{arquivos.id}"
target="#{arquivosBean.arquivo.id}" />
<p:fileDownload value="#{arquivosBean.file}" />
</p:commandButton>
<p:commandButton image="ui-icon-trash" title="Excluir"
onclick="confirmation.show()">
<f:setPropertyActionListener value="#{arquivos.id}"
target="#{arquivosBean.arquivo.id}" />
</p:commandButton>
</h:panelGrid>
</p:column>
</p:dataTable>
<p:confirmDialog id="confirmDialog" message="Confirma Exclusão?"
severity="alert" widgetVar="confirmation">
<p:commandButton id="confirm" value="Sim" update="display, messages"
oncomplete="confirmation.hide()"
actionListener="#{arquivosBean.remove}">
</p:commandButton>
<p:commandButton id="decline" value="Não"
onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
<style>
.ui-datatable .ui-datatable-data .even-row td {
background-color: #fcefa1;
border-right: solid 0px #4e6769;
}
.ui-datatable .ui-datatable-data .odd-row td {
background-color: #f7f7f7;
border-right: solid 0px #4e6769;
}
</style>
</p:panel>
</div>
</h:form>
</h:body>
</html>
lembrando que eu salvo as imagens dentro de uma pasta c:/arquivos
Testei usando seu código …
Mas também nao chamou o método : fileUploadAction
-------------- CONSOLE ---------------
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
AVISO: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo dynamiccontent. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
INFO: Skipping call to libraryExists(). Please set context-param com.sun.faces.enableMissingResourceLibraryDetection to true to verify if library http://java.sun.com/jsf/composite/exporter actually exists
cara poderia postar os teus códigos
Ei jaissonduarte, eu queria uma ajuda, vc tem msn ou gtalk? =)
ei kelymaciel
manda uma mp
Lá vai …
// web.xml
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>
org.primefaces.webapp.filter.FileUploadFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
//MeuBean.java
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
@ManagedBean(name="meuBean")
@ViewScoped
public class MeuBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public void handleFileUpload(FileUploadEvent event) {
FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void teste(){
}
}
//upload.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Luirton</title>
</h:head>
<h:body>
<h:form enctype="multipart/form-data">
<p:panel header="Luirton - Upload exemplo ;)">
<p:fileUpload fileUploadListener="#{meuBean.handleFileUpload}"
mode="advanced"
update="messages"
multiple="true"
allowTypes="/(\.|\/)(gif|jpe?g|png|JGP)$/"/>
<p:growl id="messages" showDetail="true"/>
</p:panel>
</h:form>
</h:body>
</html>
O método : handleFileUpload não é chamado …
Porém o browser faz um post para o servidor.
Também já tentei algumas coisas como :
<context-param>
<description>
State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2
</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>
client
</param-value>
</context-param>
e
<mime-mapping>
<extension>java</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
<mime-mapping>
<extension>cpp</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
Agradeço qualquer sugestão !
meu amigo joaoorso, seguinte desde que eu aprendia fazer upload com o primefaces eu faço assim:
no meu projeto eu adiciona as seguintes bibliotecas:
commons-fileupload-1.2.2.jar
commons-io-2.3.jar
primefaces-3.1.1.jar
meu Bean:
public class MeuBean implements Serializable{
private String nome;
private String caminho;
//gets e set
//coinstrutor
}
e crio o seguinte código com os atributos e métodos:
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;
@ManagedBean(name = "meuMB")
@SessionScoped
public class MeuMB implements Serializable{
private MeuBean meuBean;
private StreamedContent file;
public void setFile(StreamedContent file) {
this.file = file;
}
public StreamedContent getFile(Documento documento) throws FileNotFoundException {
//essas variáveis locais eu uso para pegar o nome e a onde eu vou guardar
String arquivo = meuBean.getNome();
String caminho = meuBean.getCaminho();
FileInputStream stream = new FileInputStream(caminho);
file = new DefaultStreamedContent(stream, caminho, arquivo);
return file;
}
public void fileUploadAction(FileUploadEvent event) throws IOException {
try {
UploadedFile arq = event.getFile();
InputStream in = new BufferedInputStream(arq.getInputstream());
File file = new File("C:/diretório onde vou guardar/"+arq.getFileName());
meuBean.setCaminho(file.getAbsolutePath());
FileOutputStream fout = new FileOutputStream(file);
while (in.available() != 0) {
fout.write(in.read());
}
fout.close();
FacesMessage msg = new FacesMessage("O Arquivo ", file.getName() + " salvo.");
FacesContext.getCurrentInstance().addMessage("msgUpdate", msg);
} catch (Exception ex) {
System.out.println("erro no upload "+ex.getMessage());
}
}
}
e a página fica assim:
<h:outputText value="Carregar Arquivo"/>
<p:fileUpload label="Selecionar..." fileUploadListener="#{meuMB.fileUploadAction}" id="caminho" value="#{meuMB.caminho}" />
o web.xml continua igual
Coloquei um botão, só para testar a chamada ao MB:
<p:commandButton ajax="false" value="Cadastrar" id="cadastrar" immediate="true"
action="#{meuBean.vai}" />
Ele funciona somente se eu remover o trecho: enctype=“multipart/form-data”
No entanto, nenhum dos casos a chamada ao método : fileUploadAction acontece.
Também atualizei a versão do commons-io. de 2.0 para 2.3. Uúnico .jar o qual a versão não coincidia com a do exemplo.
Até o momento só tentativas frustradas. O listner continua surdo. :roll:
mostra a saída do terminal, ou algo parecido
coloca um system.out.println(“1”); no teu métoda para ver se é chamado ou não
Seguinte tem versoes do primefaces que pode dar alguma boberinha, eu utilizei os seguintes jar’s:
commons-fileupload-1.1.jar
commons-io-1.4.jar
primefaces-2.2.1.jar
Só adicionar ao projeto em anexo! Qualquer coisa so perguntar de novo.
Mais tem configuracao no web.xml
Adicionei os jars :
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
ao build path e agora funcionou … ! (nossa que surra desse componente )
Ericeu
Junho 12, 2013, 9:51am
#20
jaissonduarte obrigado cara, vc salvou minha vida! hehe… Eu estava com o mesmo problema do nosso amigo joaoorso