Ajuda com rich:fileUpload

5 respostas
FkJ

Quando faço upload de um arquivo, o arquivo temporário é criado corretamente no servidor, mas ao tentar move-lo para outra pasta o método renameTo da classe File retorna falso. O conteúdo q fica dentro do component com as informações do upload desaparece e não é exibida nenhuma mensagem no componente rich:messages, como se a página tivesse sido recarregada. Segue abaixo o código do managed bean e da tag.

public void fileUploadListener(UploadEvent event)
        {
            File uploadedFile = event.getUploadItem().getFile();
            if(uploadedFile.renameTo(new File("/home/fjaekel", uploadedFile.getName())))
            {
                addSuccessMessage("ok");
            }
            else
            {
                addErrorMessage("erro");
            }
        }
<rich:fileUpload
                        immediateUpload="true"
                        addControlLabel="Enviar imagem"
                        listHeight="50"               
                        fileUploadListener="#{logomarcaImpressaoBean.fileUploadListener}" />
Obrigado pela ajuda,
Felipe

5 Respostas

DirceuSobrinho

Para fazer upload com richfaces eu faço da seguinte forma:

no web.xml, eu informo no filtro do richfaces para nao criar arquivo temporario

<filter>
    <display-name>RichFaces Filter</display-name>
    <filter-name>richfaces</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
    	<init-param>  
             <param-name>createTempFiles</param-name>  
             <param-value>false</param-value>  
         </init-param>  
         <init-param>  
             <param-name>maxRequestSize</param-name>  
             <param-value>550000</param-value>  
         </init-param>
         <init-param>
			<param-name>forceparser</param-name>
			<param-value>false</param-value>
		</init-param>
         
  </filter>
  <filter-mapping>
    <filter-name>richfaces</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>

e no metodo que dispara no FileUploadListerner:

public void upload(UploadEvent event){
		UploadItem item = event.getUploadItem();
		ByteArrayOutputStream b = new ByteArrayOutputStream();
		b.write(item.getData());
		File file = new File(diretorio_onde_os_arquivos_serao_salvos + "//" + item.getFileName());
		b.writeTo(new FileOutputStream(file));
	}

Att. Dirceu

FkJ

Funcionou, valeu.

Porém não consigo exibir mensagens no rich:messages de jeito nenhum quando a mensagem é adicionada dentro do fileUploladListener, conforme mostrado no método q postei acima.

Alguém já conseguiu usar o rich:fileUpload + rich:messages?

DirceuSobrinho

em métodos disparados por uma ação você deve adicionar uma mensagem de erro na pilha de mensagens

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Ocorreu um erro durante o upload"));
FkJ

É o q estou fazendo, mas apenas no método do upload não funciona. Segue o código dos métodos:

protected void addSuccessMessage(String summary) 
	{
		getFacesContext().addMessage(null,
				new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null));
	}

	protected void addErrorMessage(String summary) 
 {
		getFacesContext().addMessage(null,
				new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, null));

	}
DirceuSobrinho

Então não é por causa do immediateUpload='true"?

<rich:fileUpload immediateUpload="true"

Normalmente quando é colocada o atributo immediate=“true”, não é feita a validação, acho que o immediateUpload deve agir da mesma forma

tenta entao colocando immediateUpload=“false”

Att

Criado 10 de dezembro de 2008
Ultima resposta 12 de dez. de 2008
Respostas 5
Participantes 2