FileUpload Prime Faces

Pessoal, o javaScript do meu fileUpload não funciona nem com reza… segui o exemplo feito em:

http://quebrandoparadigmas.wordpress.com/category/netbeans-6-9/

onde a intenção é somente exibir num outText o nome do arquivo que acabou de ser selecionado, porém ele não faz a renderização e muito menos coloca o valor no Bean.

meu Managed Bean é esse:

[code]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;

/**

*/
@ManagedBean
@SessionScoped
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) {
   
	System.out.print("Testeeee");
	try {
        setNomeArquivoSelecionado(event.getFile().getFileName());
        imagem = new DefaultStreamedContent(event.getFile().getInputstream());
    } catch (IOException ex) {
        Logger.getLogger(FileUploadController.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}
[/code]

minha página JSF:

[code]<?xml version=‘1.0’ encoding=‘UTF-8’ ?>
<!DOCTYPE composition 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”>

&lt;h:head&gt;

     &lt;title&gt;Upload de Arquivos com primefaces&lt;/title&gt;

&lt;/h:head&gt;

&lt;h:body&gt;

    &lt;h:form&gt;

        &lt;p:fileUpload auto="false" label="Selecionar..." allowTypes="*.gif,*.png,*.jpg" multiple="false" description="Imagem" fileUploadListener="#{fileUploadController.fileUploadAction}" update="idarquivo" /&gt;

        Arquivo selecionado: &lt;h:outputText id="idarquivo" value="#{fileUploadController.nomeArquivoSelecionado}"/&gt;
                     

    &lt;/h:form&gt;

&lt;/h:body&gt;

</html>

[/code]

ele nem chega a mostrar no Console o “Testee”. no meu Web.xml ja coloquei o filtro do Prime como descrito no artigo.

estou usando o PrimeFaces 2.0.2 SNAPSHOT.jar com Eclipse

alguém sabe pq isso ocorre?

Olá, isso é estranho… Porque você acha que o problema é JavaScript? Na verdade é em flash. Veja se você colocou o filtro direito, porque pelo que você disse o método nem está sendo executado…

Veja se a definição do seu filtro está como abaixo:

<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>

Obs: Você adicionou os arquivos commons-fileupload.jar e commons-io.jar no seu classpath?

O exemplo aqui do blog http://quebrandoparadigmas.wordpress.com/ tá completinho…funcionou beleza.

caraaa… tá td como no exemplo lá! e não funcionou!

vc tem um projeto com apenas essa página funcionando??

tinha como disponibilizar?? pq não tenho mais onde recorrer tendo em vista que esta td como citado no artigo e até o exemplo do PrimeFaces.

Eu fiz o projeto usando o netbeans, empacotei e coloquei pra download. Tá no final do post. Espero que agora dê certo.

Mais uma coisa Aécio, se em sua página qualquer outro componente estiver dando problemas de javascript o fileuploado não vai funcionar. Então certifique-se de que não exista um outro componente com problemas de javascript ou qualquer outra coisa.

att,

Wagner Borges.

não achei o download!!

Bom, tá no final do post. Mas vai aí o link direto

att,

Wagner Borges.

vlw!! vou testar!!

cara… tentei fazer aqui o deploy…

acontece que na página onde tem o UpLoad só aparece o texto… Arquivo selecionado:

não aparace os componentes JSF, sabe o que pode ser isso?? os jars já esão no classPath do Aplicativo. tentei tbm com o fonte pelo netBeans mas acontece a mesma coisa!!

pessoal eu to tentando usar esse componente aqui tbm tá dando problema eu baixei os jars td certinho alterei meu web.xml como manda o figurino. só que não funciona nem na bala.
Eu estou usando o tomcat 7, tem alguma coisa a ver? esse componente só funciona no glassfish3?
Abraço.

de uma olhada aqui http://quebrandoparadigmas.wordpress.com/2010/07/06/file-upload-com-primefaces-e-jsf2

colocou as libs commons-fileupload1.1 e commons-io.jar ?

Eu passei pela mesma experiência e foi TRASH até descobrir oq era.

A solução para o meu problema foi colocar entre as tags a tag <p:resources />

e lá no web.xml adicionar os filtros abaixo

<servlet>
      <servlet-name>Resource Servlet</servlet-name>
      <servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
</servlet>   
   
<servlet-mapping>
      <servlet-name>Resource Servlet</servlet-name>
      <url-pattern>/primefaces_resource/*</url-pattern>
</servlet-mapping>

Testa ae para ver se funciona.

Eu também segui este exemplo e não consegui fazer o <p:graphicImage> carregar a imagem que acabou de ser uploadeada (PQP !!! ficou feio hein)

Ricardo

tb estou com o mesmo problema, estou seguindo o mesmo blog,o meu web.xml tb esta com [code]
Resource Servlet
org.primefaces.resource.ResourceServlet

Resource Servlet /primefaces_resource/* [/code] e tb nao funciona comecei a depurar para ver o js e esta dando erro de javascript

‘YAHOO’ não está definido cookie-min.js.xhtml?ln=primefaces, linha 7 Caractere 1.

se alguem ai ja conseguiu resolver o problema, por favor posta ai a solucao

Eu também segui esse tutorial e deu QUASE certo.
Eu consigo fazer o upload, mas não atualiza a tag <p:graphicImage>.

Parece que o atributo UPDATE do FILEUPLOAD não funciona.
Minha aplicação está praticamente igual ao exemplo do tutorial. A única diferença é que estou usando a versão 1.1 do Primefaces.

Alguém já passou por esta situação ??

Ricardo

cara eu acho q é problema de versao estava usando a versao do primefaces-2.2.M1 acho q é a versao de teste e estava dando erro de java script faltando alguma biblioteca para ser exato estava com esse problema aqui "‘YAHOO’ is not defined cookie-min.js.xhtml?ln=primefaces, line 7 character 1. " fiz um “downgrade” para primefaces-2.1 e funcionou ate um certo ponto pos o erro que esta dando é nao tem a ver com javascript e sim com “java.util.zip.ZipException: incomplete literal/length tree” tem ideia do q seja ?

Pessoal, em que lugar eu seto o local para onde o arquivo deve ser upado ???

Você pode configurar o caminho no filtro dentro do web.xml

Por exemplo:

<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:\temp</param-value>
      </init-param>
   </filter>
   <filter-mapping>

Ricardo

[quote=ricardo13]Você pode configurar o caminho no filtro dentro do web.xml

Por exemplo:

<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:\temp</param-value>
      </init-param>
   </filter>
   <filter-mapping>

Ricardo
[/quote]

Do modo que eu estou fazendo, o componente esta assim:

 <p:fileUpload id="idFileUpload"
                            auto="true"
                          label="Procurar..."
                          allowTypes="*.avi,*.mpeg,*.webm,*.wmv,*.mp3,*.flv"
                          multiple="false"

                          fileUploadListener="#{fileUploadController.fileUploadAction}"
                          update="idMeuForm"  />

o componente chama o metodo fileUploadAction

 public void fileUploadAction(FileUploadEvent event) throws IOException {
System.out.println("----> fileUploadAction(FileUploadEvent event)");
    System.out.println("---->fileUploadAction(FileUploadEvent event)");
    nomeArquivoSelecionado = event.getFile().getFileName();

    System.out.println("----> nome do arquivo selecionado: " + nomeArquivoSelecionado);

    byte[] conteudo = event.getFile().getContents();

    String caminho = "C:\\apache-tomcat-6.0.28\\webapps\\ROOT\\" + event.getFile().getFileName();
    FileOutputStream fos = new FileOutputStream(caminho);
    fos.write(conteudo);
    fos.close();


    this.dcPanel = true;
    System.out.println("---->var dcPanel setada para: " + this.dcPanel);
}


ou seja, em um momento eu seto o caminho que o sistema deve mandar o arquivo:

String caminho = "C:\\apache-tomcat-6.0.28\\webapps\\ROOT\\" + event.getFile().getFileName(); FileOutputStream fos = new FileOutputStream(caminho);

…se eu usar esse modo de setar o caminho no web.xml como o ricardo disse, como fica meu metodo?

o componente <p:fileUpload> nem precisaria de um fileUploadListener ?? ele enviaria automaticamente o arquivo para o local especificado no xml ???

Eu acho que não, mas você pode colocar um log ou qualquer outra coisa.

Envia.

Ricardo

Pessoa estou com um problema similar, desculpa de de postar isto aqui mais não sei mais aonde recorrer

meu problema

Ajuda?