Referência: ViewScoped sendo criado muitas vezes
Ainda hoje, com aplicações web com JSF 2.3 mais recentes (Wildfly e Thornail mais recentes, versões estáveis) esse problema do bean com @ViewScoped ainda acontece.
Esse artigo do Rafael Ponte detalha muito bem esse problema: http://www.rponte.com.br/2013/12/02/viewscoped-o-ovo-e-a-galinha/#comment-149441
Esses dois repositórios a seguir que são uma demostração de um cadastro CRUD apresenta esse problema "chicken/egg issue": https://github.com/cassiusvm/cadastrocrud e https://github.com/cassiusvm/cadastrocrud-thorntail
Os beans UpdateBean e DeleteBean carregam a pessoa selecionada (através de escopo flash) e mostra suas informações na janela para atualização e exclusão respectivamente, quando fazia refresh da página, as informações da pessoa sumiam porque o método com @PostConstruct era chamado novamente e assim atribuía null ao objeto Person por causa do escopo flash que não existia mais.
Resolvi esse problema parcialmente, colocando novamente a pessoa selecionada em escopo flash, como pode ser visto no código atual do método init() com anotação @PostConstruct.
Isso vai contra o conceito/especificação da anotação @ViewScoped que deveria manter o bean carregado estando esse sempre na mesma view.
Essa publicação é uma outra resposta para o tópico original e também um questionamento se outros desenvolvedores também passaram por esse problema e acharam uma solução ou não.