Aplicações sérias em JSF usam Facelets

Não há exagero no título do post, de fato, aplicações sérias desenvolvidas em JSF deveriam utilizar Facelets. Desenvolvedores que abrem mão de todas as vantagens oferecidas por este framework estão “pisando na bola”.

Já é de conhecimento da maioria que JSF sozinho [apenas a implementação] não nos fornece os recursos necessários para desenvolver médias ou grandes aplicações webs de maneira produtiva, o framework possui vários problemas (mas qual não possui?), muitos deles são facilmente resolvidos com a adoção de algum framework ou conjunto de componentes, outros podemos resolver apenas com algum conhecimento/conceito base sobre o framework ou seguindo algumas boas práticas.

E por falar em boas práticas, certamente uma das melhores práticas -e praticamente obrigatória- é a utilização de algum framework de templating para construção das páginas, não somente em JSF, claro.

Pois se estamos trabalhando com páginas, por que então não utilizarmos algum framework para definição de templates?

Templating frameworks

Hoje existem várias opções de frameworks com essa finalidade, porém a grande maioria deles não foi desenvolvido para trabalhar com JSF, a maioria deles não foi desenvolvido para trabalhar de acordo com o ciclo de vida das requisições processadas pelo JSF. Alguns deles funcionam até bem, porém com toda certeza em determinados momentos eles te deixarão na mão.

Acredito que hoje os frameworks para definição de templates mais comuns são o Struts Tiles e o Sitemesh, ambos funcionam bem com JSF até que em algumas situações os problemas começam a surgir, problemas como perda do FacesContext, código duplicado, conflito de componentes, funcionalidades AJAX param de funcionar etc. Sendo, com certeza nem Struts Tiles nem Sitemesh são boas opções de frameworks para se trabalhar com JSF.

Pior do que usar um dos dois frameworks citados acima é criar seu próprio mini-fashion-templating-framework, seja utilizando-se de JSP taglibs ou mesmo de um Servlet Filter, não importa, fuja disso, evite reinventar a roda, aliás, evite reinventar uma roda ainda pior do que as já existentes [não quero entrar na discussão dos malefícios de criar seu framework caseiro].

A melhor opção

Já faz um bom tempo que temos excelentes opções de templating frameworks desenvolvidos especialmente para JavaServer Faces como o Facelets ou JSFTemplating. Ambos trabalham perfeitamente bem com JSF e trazem diversos benefícios tanto em termos de perfomance como em produtividade.

Mas com toda certeza o mais utilizado, mais popular, com maior suporte da comunidade, maior documentação e provavelmente mais estável entre eles é o Facelets.

Iniciar um projeto web com JSF e não adotar Facelets é começar um projeto “pisando na bola”, é abrir mão de diversos benefícios para a equipe de desenvolvedores e para a aplicação em si.

Facelets possui várias vantagens que vão desde a facilidade na criação e reutilização de páginas e componentes, melhor depuração de erros, AJAX nativo, uma melhor compatibilidade entre XHTML, JSTL e os componentes, ele é independente de web container, e claro, Facelets é de 30% a 50% mais rápido que JSP.

Ah, claro, como poderia esquecer, JSF2.0 adotou Facelets como view handler padrão, então, provavelmente migrar uma aplicação de JSF1.2 (ou mesmo JSF1.1) para JSF2.0 será menos trabalhoso ainda caso você não o estive usando.

Estas são somente algumas vantagens ao se adotar Facelets em um projeto, existem várias outras, mas eu considero estas como as principais.

Concluindo

Infelizmente JSF1.2 utiliza-se de JSP como view handler padrão por questões políticas e principalmente comercias, mas acreditem em mim, eles são como água e óleo, não combinam juntos. Para falar a verdade, por que você acha que todos os exemplos dos produtos da JBoss (Richfaces, Seam etc) estão utilizando-se massivamente de Facelets e não de JSP?

Enfim, não há motivos para não adotar Facelets em um novo projeto ou mesmo em um projeto já em andamento [é possível ir migrando de JSP para Facelets aos poucos], todos os conjuntos de componentes que conheço funcionam perfeitamente bem com ele e algumas vezes até melhor, o que não falta são artigos, blogs, tutoriais, fóruns, revistas e listas de discussão com informações suficientes para configurar e tirar melhor proveito do Facelets na sua aplicação.

Volto a dizer, iniciar um projeto sério em JSF sem adotar Facelets como framework para templating é começar errado. Eu falo sério.

Tagged with: , , , , , , , , , , , , , , , , , , ,
Posted in Boas Práticas, Java, JEE, JSF, web
10 comments on “Aplicações sérias em JSF usam Facelets
  1. Lembro que há uns 3 anos atrás, praticamente no início do uso de JSF, descobri um pequeno framework chamado Facelets que um tal de Jacob Hookom desenvolvia e apresentava em seu blog…

    Depois de testar um pouco, sugeri sua utilização em um projeto que estávamos começando (e que continua em desenvolvimento até hoje), mas a resistência para sua adoção foi tremenda! Acho que o costume de utilizar JSPs e o ‘problema’ (??) de ter que escrever as páginas em XHTML puro motivaram esta resistência…

    Muitos dos problemas que foram encontrados nesses anos, seja de templating, depuração, criação de tags e componentes, seriam muito atenuados se Facelets estivesse presente no projeto.

    É muito interessante ver a evolução de tecnologias que surgem ‘fora dos padrões’ e que são abraçadas pela comunidade para enfim serem adotadas ‘oficialmente’.

  2. Fernando Amorim says:

    Comecei a estudar Facelets com Spring, mais já me bati com o fato do JSTL não ser totalmente compativel com a tecnologia como o c:url que é uma tag que utilizo muito para garantir que os links estarão sempre corretos.

  3. Rafael Souza says:

    Discordo do seu post Ponte. HUuahuahua até parece.
    Certo falar hoje em JSF sem facelets soa como uma piada. O projeto é tão bom que depois do JSF 2.0 eles devem usar o nome para outro projeto, vai que de sorte né!!!

  4. Também discordo !! Existem algumas problemas com JSTL e etc no facelets…talvez isto se torne uma verdade na próxima especificação do JSF quando o facelets for realmente assumido como parte da especificação e estas situações acertadas. Vamos ver

  5. Rafael Ponte says:

    Problemas? Claro que existem, JSTL foi desenvolvida para trabalhar com JSP :) Contudo, utilizar JSTL e Facelets funciona melhor juntos do que usar JSTL no próprio JSP.

    Agora te pergunto, que problemas seriam estes?

  6. Olá Rafael,

    Parabéns pelo blog e pelo post. Quando comecei a utilizar Facelets tive algumas dificuldades, porém em seguida, quando entendi como funcionava, obtive resultados acima do esperado.

  7. Alexandre says:

    Olá Rafael,

    Acompanho seu blog há algum tempo e já aprendi muito com ele. Obrigado!
    Tenho uma dúvida e agradeço se puder responder. Estou implementando uma aplicação com JSF + Richfaces + Facelets e as vezes ( não é frequente ) ao acessar a aplicação no Firefox aparece aquela tela de erro amarela (YSOD) que acredito estar relacionada com o facelets utilizar .xhtml, pois na tela de erro aparece uma mensagem do tipo “erro de correspondência, faltando tag tal”. No IE não encontro este tipo de problema.

    Já aconteceu com vc? Como resolveu?

    Obrigado, abraços.

  8. Cristiano says:

    Boa Tarde,

    Primeiramente gostaria de lhe parabenizar pelos posts relacionando ao Jsf, são muito interessantes. Aliás tive grande influência do seu Blog ao definir a utilização de templates em minha aplicação.

    Só por curiosidade, estou tendo problemas com o IE 7: Ele simplesmente não carrega nenhuma página da minha aplicação (no Firefox tudo funciona normalmente). Utilizo jsf 1.2, Richfaces 3.3.1 e Facelets 1.1.14. Alguma sugestão por resolver meu problema ?

  9. Márcia says:

    Cara, muito bom seus textos! Para mim como iniciante então… Obrigada! =)

  10. Thiago says:

    Você concorda comigo que JSP e JSTL vão caminhar pra serem deprecados no futuro?

3 Pings/Trackbacks for "Aplicações sérias em JSF usam Facelets"
  1. [...] Aplicações sérias em JSF usam Facelets | Rafael Ponte (tags: facelets) [...]

  2. [...] é uma boa tecnologia, e por mais que ela nos forneça centenas de componentes, frameworks para templating de páginas e estes componentes possuam um sistema de skinning ainda assim no final das contas teremos XHTML [...]

  3. [...] próximo tutorial ensinarei a instalar o Facelets, pois aplicações sérias em JSF usam Facelets! Não [...]

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>