Galera, estou usando um FileUpload do Primefaces e tudo está funcionando corretamente…
Mas gostaria que ao terminar de fazer o upload dos arquivos, houvesse um redirecionamento pra outra página JSF…
Como eu faço isso?
<p:fileUpload fileUploadListener="#{registroBean.armazenarMidia}"
showButtons="true" uploadLabel="Armazenar" cancelLabel="Cancelar"
label="Adicionar" mode="advanced" update="messages" multiple="true"
invalidFileMessage="Extensão de arquivo inválida. Só serão permitidos arquivos PDF."
invalidSizeMessage="Tamanho fora do padrão permitido."
allowTypes="/(\.|\/)(pdf)$/" rendered="true" />
Ele chama um método no Bean que recebe um ActionEvent e faz o processamento do Upload…
O ideal seria se eu pudesse passar pra outro método nesse Bean que faria o redirecionamento.
Porque eu não sei como determinar o final do upload… Esse método no Bean é chamado e executado 10 vezes se forem 10 arquivos “upados”.
Se eu soubesse o que determina o final da lista de arquivos a serem carregados, seria mais fácil fazer esse sendRedirect(); =/
[quote=gabriel.amoedo]Porque eu não sei como determinar o final do upload… Esse método no Bean é chamado e executado 10 vezes se forem 10 arquivos “upados”.
Se eu soubesse o que determina o final da lista de arquivos a serem carregados, seria mais fácil fazer esse sendRedirect(); =/[/quote]
Tenho um workaround… cria um command button com display: none; que tem action para a pagina que você quer redirecionar. Da um botao.click(); no oncomplete do p:fileupload… Ou usa o <p:ajax />
[quote=gabriel.amoedo]Hmmm interessante… Vou testar esse OnComplete.
A propósito, existe alguma progressbar já embutida nesse FileUpload?
Caso não, como eu poderia colocar uma ali pra saber o andamento do processo?[/quote]
Sério? Eu uso a 3.3 e não descobri ainda como ativar…
Existe uma maneira de alterar o “cálculo do progresso” dessa bar?
Porque além de fazer upload, eu vou fazer mais algumas operações.
Se não tiver como, talvez seja interessante remover essa e colocar uma ao lado… (aí vai esbarrar em layout, quantidade de arquivos selecionados pra upload… JSF é um saco nessas integrações visuais)
O OnComplete é ativado quando termina um upload…
Então se eu colocar 10 arquivos, ele é chamado assim que eu termino de fazer o primeiro upload…
Não funcionou…
Eu preciso que chame apenas quando terminar os 10 arquivos.
Fiz um teste e realmente não é problema do código…
O OnComplete do FileUpload é para CADA arquivo processado.
Não existe nenhuma maneira de saber quando é o último arquivo pra poder fazer esse processamento?
Ou descobrir quando não tem mais arquivos para fazer upload?
Procurei MUITO na internet e não consegui encontrar…
[quote=gabriel.amoedo]Galera, estou usando um FileUpload do Primefaces e tudo está funcionando corretamente…
Mas gostaria que ao terminar de fazer o upload dos arquivos, houvesse um redirecionamento pra outra página JSF…
Como eu faço isso?
<p:fileUpload fileUploadListener="#{registroBean.armazenarMidia}"
showButtons="true" uploadLabel="Armazenar" cancelLabel="Cancelar"
label="Adicionar" mode="advanced" update="messages" multiple="true"
invalidFileMessage="Extensão de arquivo inválida. Só serão permitidos arquivos PDF."
invalidSizeMessage="Tamanho fora do padrão permitido."
allowTypes="/(\.|\/)(pdf)$/" rendered="true" />
Ele chama um método no Bean que recebe um ActionEvent e faz o processamento do Upload…
O ideal seria se eu pudesse passar pra outro método nesse Bean que faria o redirecionamento.
Alguma sugestão?
[/quote]
Gabriel,
Não sei que jeito você deu, mas gostaria de deixar aqui minha sugestão para constar para as próximas pessoas que precisarem.
No caso como não há nenhuma forma no PF 3.4 de saber quantos arquivos tem na lista de uploads no FileUploadEvent (na versão mais nova tem como colocar a propriedade merge=true onde ele vai mandar tudo num único request), eu resolvi acrescentar na rotina um arquivo vazio no fim da lista para que quando este for processado ai então sei que encerrou todos os uploads. Ta aí, é um super gambi mas no meu caso fui obrigado a fazer.
Você poderia me dar mais detalhes sobre essa solução? ainda não consegui resolver o meu problema…
Grato![/quote]
O componente de interface permite a inclusão de vários arquivos para upload e também permite que os mesmos sejam processados na ordem que foram incluídos. Então a instrução é de seja incluído um arquivo no final dessa lista, e ele vai indicar na rotina do servidor que você deve encerrar o processamento.
Não é 100%, mas já resolve a questão de ter um momento para finalizar a operação.
No meu caso o usuário inclui. ex. vai no diretório do dia e seleciona tudo (ctrl+a), adiciona e faz o upload… nesse diretório já consta em último o arquivo de finalização.