Como mostrar a mensagem de caras na página redirecionada

Eu forneci uma interface que permite aos usuários criar contas para um aplicativo. No final do processo, o método de registro executa o processo de registro, adiciona uma mensagem de sucesso à página e, em seguida, navega o usuário para uma tabela de dados central que exibe todos os usuários do sistema.

O problema que tenho é que a mensagem de sucesso nunca é exibida por causa do redirecionamento da página. Eu não posso ter um wait () no método porque a mensagem JSF não será exibida até que o método seja concluído. Idealmente, quero que a mensagem de sucesso seja exibida e, em seguida, em um horário especificado, mais tarde, a página será redirecionada.

Como posso conseguir isso?

Mantenha a mensagem no escopo do flash . Vai sobreviver ao redirecionamento.

context.addMessage(clientId, message); externalContext.getFlash().setKeepMessages(true); return "users.xhtml?faces-redirect=true"; 

Note que as versões mais antigas do Mojarra possuem alguns bugs relacionados ao escopo do Flash:

  • issue 1755 – Mensagens no escopo do Flash residem por mais tempo que o próximo pedido – corrigido em 2.0.7 / 2.1.4
  • issue 2130 – O cookie Flash permite a exploração de dados – corrigido em 2.1.24 / 2.2.1
  • issue 2140 – Flash cookie não disponível quando redirecionado para um caminho diferente – corrigido em 2.1.14 / 2.2.0
  • issue 2906 – O cookie Flash usa o caminho errado para aplicativos no root – corrigido em 2.1.24 / 2.2.1
  • issue 2959 – O Flash cria, às vezes, o cookie version1 que falha no IE – corrigido no 2.1.25 / 2.2.2
  • issue 2977 – O Flash causa o NPE em cookies obsoletos depois de uma session expirar – corrigido em 2.1.25 / 2.2.2
  • 2466 – Flash cookie não apagado quando obsoleto – corrigido em 2.1.27 / 2.2.5

É melhor atualizar para um mínimo de Mojarra 2.1.27 / 2.2.5 para garantir que seu aplicativo não seja afetado por isso.