<rich:fileUpload> não executa event listener

1 resposta
L

Estou desenvolvendo uma aplicação na qual preciso armazenar no servidor vários anexos. Baixei o richfaces 3.2.2, e estou usando o componente rich:fileUpload. Tenho quase certeza de que segui as orientações do guia do usuário. Usando o componente eu seleciono o arquivo para upload, ele diz que o upload foi feito, mas o método apontado pelo event listener não é executado. Alguém já se deparou com um problema como este?

Aqui está o código do ManagedBean:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.ajax4jsf.component.UIActionParameter;
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;

/**
 * @since 13/02/2009
 * @author Luiz Carlos Gonçalves
 * @finalidade
 */
public class AnexosUploadDownload {

    private ArrayList<UploadItem> listaAnexos = new ArrayList();
    private UIParameter ps_numero = new UIActionParameter();

    public AnexosUploadDownload() {
    }

    /*
     * Listener chamado pelo componente upload que adiciona o arquivo a lista de
     * arquivos selecionados para upload
     *
     * @param event
     */
    public void upload(UploadEvent event) {
        this.listaAnexos.add(event.getUploadItem());
    }

    /**
     * @return the listaAnexos
     */
    public ArrayList getListaAnexos() {
        return listaAnexos;
    }

    /**
     * @param listaAnexos the listaAnexos to set
     */
    public void setListaAnexos(ArrayList listaAnexos) {
        this.listaAnexos = listaAnexos;
    }

    public String salvaAnexoEmDisco() {


        FacesContext fc = FacesContext.getCurrentInstance();

        ServletContext sc = (ServletContext) fc.getExternalContext().getContext();


        String diretorio = sc.getRealPath("/anexos/"+ps_numero.getValue().toString());

        File pasta = new File(diretorio);
        if (!pasta.exists()) {
            pasta.mkdir();
        }

        FileOutputStream saida;


        for (int i = 1; i < listaAnexos.size(); i++) {
            File fileToCreate = new File(diretorio + "/" + listaAnexos.get(i).getFileName());
            try {

                saida = new FileOutputStream(fileToCreate);
                saida.write(listaAnexos.get(i).getData());
                saida.flush();
                saida.close();

            } catch (FileNotFoundException ex) {
                Logger.getLogger(ProcessoSeletivo.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(ProcessoSeletivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return null;
    }

    /**
     * @return the ps_numero
     */
    public UIParameter getPs_numero() {
        return ps_numero;
    }

    /**
     * @param ps_numero the ps_numero to set
     */
    public void setPs_numero(UIParameter ps_numero) {
        this.ps_numero = ps_numero;
    }

}

Aqui a declaração do ManageBean no facesconfig.xml

<managed-bean>
        <managed-bean-name>updownload</managed-bean-name>
        <managed-bean-class>pacote.AnexosUploadDownload</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Aqui o código do rich:fileupload na página:

<rich:fileUpload
                                immediate="false"
                                immediateUpload="false"
                                maxFilesQuantity="1"
                                clearAllControlLabel="Limpar todos"
                                clearControlLabel="Limpar"
                                uploadControlLabel="Enviar"
                                addControlLabel="Adicionar"
                                doneLabel="Arquivo enviado!"
                                cancelEntryControlLabel="Cancelar"
                                id="uploadAnexos"
                                listHeight="100%"
                                listWidth="300px"
                                uploadData="#{updownload.listaAnexos}"
                                fileUploadListener="#{updownload.upload}"                                
                                >
                            <f:facet name="label">
                                <h:outputText value="{_KB}KB de {KB}KB enviados --- {mm}:{ss}" />
                            </f:facet>
                            <a4j:support event="oncompleteupload" action="#{updownload.salvaAnexoEmDisco}">
                                <f:param value="#{processoSeletivo.numero}" name="ps_numero" binding="#{updownload.ps_numero}"/>
                            </a4j:support>                           
                            
                            </rich:fileUpload>

1 Resposta

S

Depois de muito pesquisar e tentar, por algum motivo ao retirar o "extensionsFilter" do web.xml, consegui resolver o problema.

Retirado:
<filter>
    <filter-name>extensionsFilter</filter-name>
    <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
    <init-param>
      <param-name>uploadMaxFileSize</param-name>
      <param-value>10m</param-value>
    </init-param>
    <init-param>
      <param-name>uploadThresholdSize</param-name>
      <param-value>2000k</param-value>
    </init-param> 
    <init-param>
      <param-name>uploadRepositoryPath</param-name>
      <param-value>/temp</param-value>
    </init-param>
  </filter>

Só deixei o filtro do "Ajax4jsf"

<filter>
    <display-name>Ajax4jsf Filter</display-name>
    <filter-name>ajax4jsf</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
    
   <init-param>    
   	<param-name>createTempFiles</param-name>    
   	<param-value>true</param-value>    
   </init-param>    
   
   <init-param>    
   	<param-name>maxRequestSize</param-name>    
    <param-value>1000000</param-value>    
   </init-param>  
   
   <init-param>  
   	<param-name>forceparser</param-name>  
    <param-value>false</param-value>  
   </init-param>     
  </filter>
Criado 17 de fevereiro de 2009
Ultima resposta 6 de out. de 2009
Respostas 1
Participantes 2