JSF PrimeFaces: Como usar FileUpload com AjaxStatus

848 views
Skip to first unread message

Donizete Waterkemper

unread,
Mar 15, 2011, 12:14:52 PM3/15/11
to jav...@googlegroups.com
Boa tarde,

Fiz uma página para importação de arquivos CSV para a base dados. Estou usando o componente FileUpload do PrimeFaces. Por padrão ele vem com uma animação com o contador do status do processo de apenas o upload do arquivo para o servidor. Mas nesse caso, depois de fazer upload do arquivo, tbm tenho processos de validações dos dados do arquivo, conversões e por ultimo inserções no banco de dados. Preciso travar a página com um AjaxStatus ou adicionar uma animações com AjaxEngine até todos esses processos concluirem. Atualmente estou usando no xhtml:

                        <p:fileUpload
                            fileUploadListener="#{importarControle.handleFileUpload}"
                            update="messages" sizeLimit="0" multiple="false" label="Abrir"
                            allowTypes="*.csv;" description="CSV" auto="true" >
                         </p:fileUpload>

No meu managerBean tenho o método:

    public void handleFileUpload(FileUploadEvent event) {
        try {
            stream = new DefaultStreamedContent(event.getFile().getInputstream());
            byte[] vet = event.getFile().getContents();
            String file = event.getFile().getFileName();
            file = file.substring(0, file.length() - 4);
            endereco = System.getProperty(ControleMB.AMBIENTE + ".temp") + file + System.currentTimeMillis() + ".csv";
            FileOutputStream out = new FileOutputStream(endereco);
            out.write(vet);
            out.close();
            if (validar()) {
                importar();
            }
        } catch (IOException ex) {
            ex.getMessage();
            Util.addMessageError("Erro ao importar arquivo: " + ex.getMessage());
        }
    }

Alguém tem alguma idéia de como posso implementar essa solução?

Att,
Donizete Waterkemper

Marcelo Preis Ferreira

unread,
Mar 15, 2011, 12:50:38 PM3/15/11
to jav...@googlegroups.com
Sim...

Tem esse é exatamente o que você precisa.

http://www.primefaces.org/showcase/ui/ajaxStatusHome.jsf

use o exemplo...
Programatic AjaxStatus...

Acredito ser  o que deseja
espero ter ajudado

Donizete Waterkemper

unread,
Mar 15, 2011, 1:38:12 PM3/15/11
to jav...@googlegroups.com
Boa tarde Marcelo!

Ok! Adicionei o AjaxStatus, mas ainda não aparece. Segue abaixo o código da minha p ágina xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!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:p="http://primefaces.prime.com.tr/ui"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<ui:composition template="/templates/interna.xhtml">

    <ui:define name="corpo">

        <h:head>
            <p:ajaxStatus onstart="statusDialog.show();"
                onsuccess="statusDialog.hide();" />

            <p:ajaxStatus onstart="statusDialog.show();"
                onsuccess="statusDialog.hide();" />
            <p:dialog modal="true" widgetVar="statusDialog"
                header="Processando..." draggable="false" closable="false">
                <p:graphicImage value="/img/ajaxloadingbar.gif" />
            </p:dialog>
            <title></title>
            <link type="text/css" rel="stylesheet"
                href="#{facesContext.externalContext.requestContextPath}/css/redmond/skin.css" />
        </h:head>
        <h:body style="font-size: 10pt">
            <h:form enctype="multipart/form-data">
                <center>
                    <p:messages id="mensagens" showDetail="true" showSummary="false" />
                    <br></br>
                    <p:panel header="Importação CSV"
                        style="text-align:center;width:500px;">

                        <p:fileUpload
                            fileUploadListener="#{importarControle.handleFileUpload}"
                            update="messages" sizeLimit="0" multiple="false" label="Abrir"
                            allowTypes="*.csv;" description="CSV" auto="true" />
                    </p:panel>
                    <p:commandButton value="Dados Internos"
                        action="#{importarControle.dadosInternos}" />
                    <p:commandButton value="Dinamica Entradas"
                        action="#{importarControle.dinamicaEntradas}" />
                </center>
            </h:form>
        </h:body>
    </ui:define>
</ui:composition>
</html>

Att,
Donizete Waterkemper

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

Altieres de Matos

unread,
Mar 15, 2011, 1:52:59 PM3/15/11
to jav...@googlegroups.com
Donizete,
 
tente colocar seu p:ajaxStatus dentro do form do body.
 
Altieres

Altieres de Matos

unread,
Mar 15, 2011, 2:04:33 PM3/15/11
to jav...@googlegroups.com
Donizete,
 
tente por seu p:ajaxStatus e o dialog dentro do body da pagina.
 
Altieres
 
Sent: Tuesday, March 15, 2011 2:38 PM
Subject: Re: [javasf] JSF PrimeFaces: Como usar FileUpload com AjaxStatus
 

Donizete Waterkemper

unread,
Mar 15, 2011, 2:16:05 PM3/15/11
to jav...@googlegroups.com
Boa tarde Altieres,


Fiz a alteração que vc solicitou, mas na página apenas apresenta a animação do FileUpload, e não chama o AjxStatus, conforme a imagem em anexo. Tbm segue o código alterado:

telaImportar.png


<?xml version="1.0" encoding="UTF-8"?>
<!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:p="http://primefaces.prime.com.tr/ui"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<ui:composition template="/templates/interna.xhtml">

    <ui:define name="corpo">

        <h:head>

O código do meu managerBean:
...
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
@ManagedBean
public class ImportarControle {

    private UploadedFile file;
    private StreamedContent stream;

    public UploadedFile getFile() {
        return file;
    }

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

    public void setStream(StreamedContent stream) {
        this.stream = stream;
    }

    public StreamedContent getStream() {
        return stream;
    }
    public void upload() {
        System.out.println("Upload: ");
        FacesMessage msg = new FacesMessage("Succesful", file.getFileName()
                + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);

    }

    public void handleFileUpload(FileUploadEvent event) {
        try {
            stream = new DefaultStreamedContent(event.getFile().getInputstream());
            byte[] vet = event.getFile().getContents();
            String file = event.getFile().getFileName();
            file = file.substring(0, file.length() - 4);
            endereco = System.getProperty(ControleMB.AMBIENTE + ".temp") + file + System.currentTimeMillis() + ".csv";
            FileOutputStream out = new FileOutputStream(endereco);
            out.write(vet);
            out.close();
            if (validar()) {
                importar();
            }
        } catch (IOException ex) {
            ex.getMessage();
            Util.addMessageError("Erro ao importar arquivo: " + ex.getMessage());
        }
    }
}


Att,
Donizete Waterkemper
telaImportar.png
Reply all
Reply to author
Forward
0 new messages