FileUpload + Tratamento de arquivos + primeFaces

Boa tarde pessoal!!

Seguinte, estou desenvolvendo meu sistema para o TCC e como isso começa um oceano de duvidas, estresse e depressão hahahahaa…

Gostaria que vocês (se possível), me ajudasse a entender a respeito da duvida que tenho abaixo.

Bem, vamos lá!

Neste projeto (web) eu estou usando o JSF 2 junto com o primefaces, mesmo até para facilitar meu aprendizado na tecnologia.

Vou começar a realizar tratamento em arquivos (provavelmente .csv), mas quero saber como eu posso fazer com que meu botão, denominado “importar arquivo”, possa abrir uma janela (tipo aquelas quando fazemos algum up load) para dar o inicio no tratamento a esse arquivo.

Já vi alguma coisa com jchooseFile, mas estou precisando implementar isto web!

Alguem ai pode me dar uma força?

Obrigado desde já a todos.

Veja c te ajuda: http://primefaces.org/showcase/ui/fileUploadAuto.jsf

Tem vários modelos de upload lá.

Olá hebert!

Então na verdade não ajuda!

eu tenho um p:commandbutton e queria que ele tivesse esse comportamento!

Ou seja, queria que esse meu botão disparasse o fileuploder.

Obrigado pela resposta e o tempo.

porque necessariamente precisa ser o commandbutton o responsavel por abrir o box da imagem?

Boa noite nesken!

Por questão estética da pagina. Abaixo segue ela para melhor visualização:

Quando o usuário clicar no botão (indicado pela seta), gostaria que abrisse um seletor de arquivo para eu realizar o tratamento do mesmo e exibir em um componente sheet do prime faces.

Obrigado pela força :slight_smile:

E por entaõ você não abre um dialog com algum component do primefaces que faça o upload?

É uma ótima sugestão (não tinha pensado nisso).

Mas, da maneira que eu tinha comentado é mais trabalhoso fazer?

Você acha melhor eu estar usando o componente do prime faces e poupar esforços?

Obrigado pela força e abraço!

[quote=manolo]É uma ótima sugestão (não tinha pensado nisso).

Mas, da maneira que eu tinha comentado é mais trabalhoso fazer?

Você acha melhor eu estar usando o componente do prime faces e poupar esforços?

Obrigado pela força e abraço![/quote]
Com certeza, ainda mais que esse tal de JChooseFile, pelo nome dele deve ser um componente Desktop.

Se já está usando prime, use os componentes deles, assim você evita conflitos.

E o fileUpload é um componente chatinho de se trabalhar, se você não entende como ele funciona, pode levar um tempinho até deixar funcionando como você quer.

digaoneves

vou tentar implementar da maneira que o Hebert sugeriu assim que acabar o expediente.

Mas confesso que você deixou um pouco com medo de estar trabalhando com o upload :shock:

Até porque vou ter que pegar um arquivo .csv e manipulá lo em um componente p:sheet.

Aproveitando a deixa, será que vocês conhece algum site (itutorial) que pode estar me guindo nessa nova jornada?

Abraço!

[quote=manolo]digaoneves

vou tentar implementar da maneira que o Hebert sugeriu assim que acabar o expediente.

Mas confesso que você deixou um pouco com medo de estar trabalhando com o upload :shock:

Até porque vou ter que pegar um arquivo .csv e manipulá lo em um componente p:sheet.

Aproveitando a deixa, será que vocês conhece algum site (itutorial) que pode estar me guindo nessa nova jornada?

Abraço![/quote]
Siga o showcase e faça o download do User’s Guide do Primefaces

Sim, ok!

Eu tenho uma copia aqui comigo, mas você conhece algo que posso me introduzir de forma clara e concisa na manipulação de arquivos de forma web?

Obrigado pela resposta, digaoneves.

Bem,

como o Herbert falou acima, acabei fazendo do modo que ele sugeriu e acabei gostando muito do resultado (obrigado Hebert).

Mas agora vem a parte árdua, como eu começo a tratar o arquivo que foi upado e popular em uma p:table ou p:sheet?

Não tenho ideia de onde começar, estou pesquisando bastante coisa, mas tá complicado.

Muito obrigado a todos até o momento.

Segue a tela como ficou:

Bom dia, talvez esse post te ajude.

http://www.guj.com.br/java/283339-selecionar-multiplos-arquivos-de-uma-pasta#1499797

Bom dia AmauriSpPoa!

Eu consegui fazer até o ponto que você citou.

Mas, preciso de algum tutorial que me ajude a manipular esse arquivo de preferência XML. Eu não vou ter a necessidade de gravar em bano de dados!

Apenas popular na tela em algum componente tipo table ou sheet (primefaces) permitindo o usuário modificar e baixar o documento de novo.

Achei bastante coisa na net, mas tudo extremamente confuso para o meu nível de conhecimento.

Obrigado pela ajuda.

Já ouviu falar de JAXB, não conheço bem, mas se não engano faz parte da especificação e serve para trabalhar com XML.

Da uma olhada e servindo ou não posta ai.

AmauriSpPoa,

ainda não li nada sobre!

Vou dar uma boa garibada e ver qualé que é desse JAXB

Obrigado pela informação!

Tem um exemplo bem fácil de entender lá no blog da Caelum.

Boa noite pessoal!

Peço a desculpa pela domora, mas estava estudando todas as possibilidades de como eu poderia prosseguir.

Li algumas coisas sobre JAXB e gostei muito da facilidade de uso do mesmo, mas acabei optando em tratar apenas um arquivo .csv.

Bem, com relação ao componente de <p:fileUpload> ainda estou apanhando bem.

Busquei bastante material sobre o mesmo e acabei fazendo o seguinte:

.xhtml

</h:form> <p:dialog id="basicDialog" header="Importar arquivo" widgetVar="dlg1"> <h:form enctype="multipart/form-data"> <p:fileUpload value="#{controlProductivityMB.file}" mode="simple" update="grow1"/> <p:commandButton value="#{bundle.ok}" action="#{controlProductivityMB.upLoad()}" /> <p:growl id="grow1" showDetail="true"/> </h:form>

Bean:

[code]@ManagedBean
@SessionScoped
public class controlProductivityMB implements Serializable {

/**
 * Creates a new instance of controlProductivityMB
 */
private String destination = "/tmp";
private UploadedFile file;

public void setFile(UploadedFile file) {
    this.file = file;
}

public UploadedFile getFile() {
    return file;
}

public void setTransferFile(String fileName, InputStream in) {
    try {
        OutputStream out = new FileOutputStream(new File(destination + fileName));
        int reader = 0;
        byte[] bytes = new byte[(int) getFile().getSize()];
        while ((reader = in.read(bytes)) != -1) {
            out.write(bytes, 0, reader);
        }
        in.close();
        out.flush();
        out.close();
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

public void upLoad() {
    String extValidate;
    if (getFile() != null) {
        String ext = getFile().getFileName();
        if (ext != null) {
            extValidate = ext.substring(ext.indexOf(".") + 1);
        } else {
            extValidate = "null";
        }
        if (extValidate.equals("pdf")) {
            try {
                setTransferFile(getFile().getFileName(), getFile().getInputstream());
            } catch (IOException ex) {
                Logger.getLogger(controlProductivityMB.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext faces = FacesContext.getCurrentInstance();
                faces.addMessage(null, new FacesMessage("Wrong", "Error UpLoding File"));
            }
            FacesContext faces = FacesContext.getCurrentInstance();
            faces.addMessage(null, new FacesMessage("Sucessful", getFile().getFileName() + "is uploaded. Typecontent " + getFile().getContentType() + "Size" + getFile().getSize()));
        } else {
            FacesContext faces = FacesContext.getCurrentInstance();
            faces.addMessage(null, new FacesMessage("Wrong_ext", "only extension in .pdf"));
        }
    } else {
        FacesContext faces = FacesContext.getCurrentInstance();
        faces.addMessage(null, new FacesMessage("Wrong", "Select a file."));
    }
}

}[/code]

Mapeamento web.xml

<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> <init-param> <param-name>uploadDirectory</param-name> <param-value>/uploaded</param-value> </init-param> <init-param> <param-name>thresholdSize</param-name> <param-value>51200</param-value> </init-param> <init-param> <param-name>uploadDirectory</param-name> <param-value>/tmp</param-value> </init-param> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>

O problema que está ocorrendo no momento é que meu objeto file está vindo nulo.

Não consigo enxergar onde está o erro.

Obrigado pela atenção de todos até o momento.

Se você vai usar o modo simples, não pode usar ajax.

Na mosca digaoneves!

Perdi quase a tarde interira tentando entender qual era o problema…

Vontade pular da janela viu!

Obrigado pela força.