Org.richfaces.model.UploadedFile para java.io.File(Resolvido)

3 respostas
gilsonk

Tenho uma aplicação e eu estou fazendo a migração para rf 4,0
Usando rich:fileUpload, no uploadListener procedo da seguinte forma:

public void uploadListener(FileUploadEvent event)  throws Exception{
FacesContext context= FacesContext.getCurrentInstance();
        IndexerService indexerService = (IndexerService) context.getELContext()     
        .getELResolver().getValue(context.getELContext(), null, Constants.SERVICE_INDEXER);
        UploadedFile item = event.getUploadedFile();

Neste ponto eu preciso lançar mao UploadedFile item para as functionalidades do FILE utilizando event.getUploadedFile() recuperado UploadItem, que tem o método getFile (), mas de acordo com a http://docs.jboss.org/richfaces/latest_4_0_X/javadoc/richfaces-components-api/org/richfaces/model/UploadedFile.html#getInputStream%28%29 o evento getFile () não está mais lá.
alguem tem alguma sugestão??? ou outra solução???

3 Respostas

M

usa primefaces… abaixo o codigo q eu fiz para meu sistema

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">
		
		<div align="center">
			<p:panel header="Arquivos" style="width:1050px">
				<ui:include src="/paginas/Menu.xhtml" />
				<p:messages id="mensagens" showSummary="true" />
				
				<p:fileUpload
					fileUploadListener="#{arquivosBean.fileUploadAction}"
					update="mensagens" 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" >

				<f:facet name="header">
					<p:outputPanel>
						<h:outputText value="Procurar em todos os campos:" />
						<p:inputText id="globalFilter" onkeyup="arquivosTable.filter()"
							style="width:150px" />
					</p:outputPanel>
				</f:facet>

				<p:column filterBy="#{arquivos.id}" headerText="Id" footerText="Id"
					filterMatchMode="contains">
					<h:outputText value="#{arquivos.id}" />
				</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">
					<h:outputText value="#{arquivos.tipo}" />
				</p:column>
				
				<p:column filterBy="#{arquivos.tamanho}" headerText="Tamanho"
					footerText="Tamanho" filterMatchMode="contains">
					<h:outputText value="#{arquivos.tamanho}" />
				</p:column>

				

				<p:column style="width:100px">
					<h:panelGrid columns="2" styleClass="actions" cellpadding="2">

						<h:commandButton image="/imagens/icones/download.gif" title="Download">
						<f:setPropertyActionListener value="#{arquivos.id}"
								target="#{arquivosBean.arquivo.id}" />
                        <p:fileDownload value="#{arquivosBean.file}" />  
                    </h:commandButton>  
						
						<h:commandButton image="/imagens/icones/excluir.gif" title="Excluir" action="#{arquivosBean.remove}" >
							<f:setPropertyActionListener value="#{arquivos.id}"
								target="#{arquivosBean.arquivo.id}"/>
						</h:commandButton>
					</h:panelGrid>
				</p:column>
			</p:dataTable>
				
				
				<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>

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 Arquivos arquivo = new Arquivos();
	private List<Arquivos> arquivos = new ArrayList<Arquivos>();
	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);
		System.out.println("akiii"+caminho);
		
		return file = new DefaultStreamedContent(stream, caminho);
		
	}

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

}
M

há não esqueça de configurar seu web.xml se for usar assim…

acrecente isso

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

<-- diretorio da pasta que vai ficar os arquivos -->
            <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>
gilsonk

Deu certo Obrigado!

Criado 13 de janeiro de 2012
Ultima resposta 16 de jan. de 2012
Respostas 3
Participantes 2