Trabalho com o Facelets a mais de um ano e a partir de hoje posso me considerar um usuário avançado, ao começar a estender suas classes para manipular UIViewRoot do JSF.

Vamos iniciar explicando melhor o que é Facelets e o UIViewRoot:

- Facelets, é um ótimo framework para ser usado com o JSF, que além de facilitar em muito o desenvolvimento das páginas pois utiliza páginas XTHML ao invés do JSP e tem um esquema de renderização das páginas diferenciado o que as deixa mais rápidas.
- UIViewRoot - trocando em miúdos – é a classe que representa, em objetos do tipo UIComponents, a árvore DOM que será exibida no browser.

Mas o que me fez escrever esse post foi eu estar trabalhando, e portanto, tendo que entender todo o “core” do Facelets. É preciso ressaltar a importância de três classes, a primeira é a FaceletViewHandler que em seu método buildView é onde “tudo” acontece, ou seja, é feita transformação de um arquivo XHTML com tags nativas, as tags do JSF e de outras bibliotecas de componentes em uma instância do UIViewRoot que será utilizado pelo engine do JSF para montar o resultado para o browser.
No método buildView são utilizados as outras duas classes que são importantes. A classe Facelet é responsável por popular a UIVIewRoot com os UIComponents em seu método apply. Ela é criada pela FaceletFactory que é quem pega o arquivo XHTML do disco e faz um parse dela para o Java.
Depois de tudo isso ficou bem fácil estender a FaceletViewHandler e fazer a manipulação do UIViewRoot criada. Isso ficou muito bom e é muito útil, vale apena todos os desenvolvedores JSF terem esse conhecimento.

Referências:
https://facelets.dev.java.net/nonav/docs/dev/docbook.html - Tutorial oficial do Facelets.
http://java.sun.com/javaee/5/docs/api/index.html – API do JavaEE com as classes do JSF.
http://delicious.com/sergiopantano, tags jsf e facelets.