FileUploadEvent (quando finaliza?) - Primefaces

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?

pq vc não utiliza o HttpSession.sendRedirect() de dentro do actionListener que é chamado?

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

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

Na versão que eu utilizo 3.2 tem sim…

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.

Ou então pode ter algo errado nesse código:

[code] <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”
oncomplete=“finalizaVolume.click();” />

		<p:growl id="messages" showDetail="true" />
		
	    <p:commandButton id="finalizaVolume" 
	    actionListener="#{registroBean.finalizaVolume}" 				        	 
			        	 value="Finalizar Operação (Fechar Volume)" 
			        	 icon="ui-icon-circle-check" 
			        	 style="display:none;"
			        	 ajax="false"/>  [/code]

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…

Já tentou postar sua dúvida no forum do primefaces? OBS.: Tem que ser em inglês.

Pensei nisso mas antes de postar, reparei que já tem um cara com a mesma dúvida e não obteve nenhuma ajuda…

http://forum.primefaces.org/viewtopic.php?f=3&t=22643

Poste lá que você está com a mesma dúvida até que o criador do prime te responda. Ele direto e reto passa por lá. [=

Alguém conseguiu alguma coisa a respeito?

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

Boa tarde rodrigopim.

Você poderia me dar mais detalhes sobre essa solução? ainda não consegui resolver o meu problema…

Grato!

[quote=renancortes]Boa tarde rodrigopim.

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.

Obrigado pela resposta, mas a parte que eu não entendi é como adicionar esse arquivo ao fim da lista.

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.

Entendi mas no meu caso isso não funcionaria… vou tentar descobrir alguma forma de resolver, caso eu encontra deixo aqui como referencia.

Obrigado!