Com Javascript e estruturas como jQuery, você tem total flexibilidade e controle total. Com ext's etc você perde muito controle e deve se adaptar ao framework. Com o JSF você perde totalmente o controle e deve se adaptar totalmente ao framework. Você é chamado em ciclos de vida etc. e, finalmente, você não tem controle quando a chamada para o servidor pode ser feita e onde não pode. Se você vai fazer algo considerado 'especial', você está em uma posição muito difícil. E no mundo JSF, mesmo coisas básicas como classificação de tabelas com várias colunas ou campos onde você pode digitar apenas um conjunto limitado de caracteres (como campo de número) são consideradas 'especiais'.
No entanto, quanto mais flexibilidade você tiver, mais erros ou práticas inadequadas poderá cometer. A alta flexibilidade funciona apenas com programadores altamente inteligentes; outros transformarão o projeto em um pesadelo incontrolável.
Mas, com JSF e sua flexibilidade limitada, sempre há apenas algumas (ou mesmo apenas uma) maneira correta de fazer algo. Você é muito limitado, não pode fazer atalhos, deve escrever mais XML etc. - mas ao se adaptar ao padrão, há melhor controle sobre o código que os programadores inexperientes ou pouco qualificados irão produzir. Como resultado, as grandes corporações amam o JSF porque é "mais seguro" para elas.
Quando mudei do GWT para o JSF, fiquei chocado com quantas coisas, que eram naturais para mim, eram consideradas altamente atípicas e com quantas coisas simples eram tão difíceis de conseguir. Além do mais, até mesmo fazer as menores alterações, como adicionar ':' sinal após rótulo, que no aplicativo GWT / jQuery desenvolvido estaria alterando um rótulo de geração de função, exigia a alteração de dezenas de arquivos com propriedades localizadas, o que nem mesmo foi considerado por qualquer um exceto eu estranho ...