O escopo @ViewScope presente no JSF2 é usado para armazenar seus beans na árvore de componentes da página.
Conforme definição presente no JEE 6 Tutorial:
View (@ViewScoped): View scope persists during a user’s interaction with a single page (view) of a web application.
Mas se pretender fazer o uso de JSF2 + CDI pode ter problemas/desafios pela frente. Pois o CDI se encarregará do ciclo de vida de todos os componentes do projeto, não sendo mais necessário o uso das anotações do JSF presentes no pacote javax.faces.*. Pela especificação do CDI ele atende os escopos:
@RequestScoped
@SessionScoped
@ApplicationScoped
@Dependent
@ConversationScoped
Não contemplando o escopo @ViewScope, sendo exclusivo do JSF.
Para conseguir utilizar esse escopo, existe projetos para atender essa não integração entre o JSF2 e CDI (li no blog da caelum que na versão 2.2 já existirá uma solução nativa pra isso). Googlando encontrei o MyFaces CODI e o Seam Faces.
Fiz o uso do MyFaces CODI, instalação bem simples, bastando adicionar as dependências para o projeto no pom.xml de seu projeto, conforme exemplo:
org.apache.myfaces.extensions.cdi.core myfaces-extcdi-core-impl 1.0.5 org.apache.myfaces.extensions.cdi.modules myfaces-extcdi-jsf20-module-api 1.0.5 org.apache.myfaces.extensions.cdi.modules myfaces-extcdi-jsf20-module-impl 1.0.5
Tentei fazer o uso do projeto Seam Faces, não tive problemas com a resolução de suas dependências e instalação, acabei desistindo por não estar com muito tempo disponivel. Mas segundo os posts o projeto atende a necessidade, desde que esteja configurado corretamente =D.
Resumindo, o uso do CDI + JSF2 + @ViewScope foi possivel devido ao MyFaces CODI.
Correção do uso da @ViewScope e MyFaces CODI, acabei tendo um problema em que o os atributos do bean estava sendo perdido, enquanto pesquisava a solução inicial, através do projeto ficou claro que poderia usar as tags @ViewScope ou @ViewAccessScoped, ambas deveriam ter o mesmo comportamento. Realizei o teste com a segunda tag e o fonte funcionou conforme esperado =D