Alguém falou que o JSF é como o EJB do passado. Não é, talvez o EJB 2.x tivesse alguma burocracia relacionada ao primeiro Struts, por exemplo. Mas o JSF estaria mais relacionado com as primeiras versões do Spring e do Hibernate, ou seja, classes POJO e arquivos grandes de XML.
Alguém falou que JSF foi feito tendo em mente as IDEs com interfaces visuais. Em termos. Na prática, o único jeito de se livrar da IDE é se você andar “nos trilhos”, pois é sempre necessário manter uma validação do seu XML em relação às classes Java, coisa que o javac sozinho não faz. Por isso, com o JSF, depende-se de IDE não porque é JSF, mas porque é Java. E, pessoalmente, não preciso de coisas de arrastar e soltar pra fazer páginas Faces.
Mas tem uma coisa que ninguém falou, o quanto JSF é componentizável. Não sei se existem frameworks MVC mais componentizáveis, mas deve significar muita coisa o fato de haver produtos que estendem o JSF para:
[list]ampliar os escopos “arroz-com-feijão” request, session e aplication para coisas como flash, dialog e conversation;[/list]
[list]criar componentes ajaxificados[/list]
[list]permitir execução de Managed Beans escritos em JavaScript[/list]
[list]referenciar managed beans via anotações[/list]
[list]transformar a estrutura pra ficar mais parecida com o MVP[/list]
[list]ampliar seu ciclo de vida para novas atividades[/list]
[list]gerar gráficos e PDFs com tags[/list]
[list]escolher entre páginas JSP ou XHTML[/list]
[list]mudar o render kit pra gerar WML sem mudar as páginas de apresentação[/list]
Aliás, significa não somente que o JavaServer Faces é popular, isso é apenas um lado da história, significa que o JSF é bastante componentizável podendo acrescentar, modificar e retirar componentes com uma facilidade não encontrada em outros frameworks Web.
Gosto do JSF, ele tem uma curva de aprendizado mais difícil mesmo, mas depois que peguei o jeito não acho nenhum outro melhor; quer dizer, nenhum outro melhor no Java!, porque é sempre interessante ficar sobre os trilhos.