José, aí entra outra discussão, Component Based vs ActionBased e a plataforma Java possui um número bastante abrangente de frameworks em cada um dos dois modelos.
Só para salientar JSF sozinho não resolve os problemas de persistência, segurança entre outros como RoR; por isso teria que comparar RoR com Seam por exemplo.
Aí entra a discussão do frontend, entre Component Based e ActionBased, qual dos dois modelos é mais produtivo e isso vai depender muito do nível da interatividade com o usuário. Também tem questões técnicas envolvidas, até a versão corrente do JSF mesmo os componentes não possuindo estado, o seu ciclo de vida possui. Há até uma recomendação do Garry para a versão 2.0 do cliclo ser statless.
Voltando para o Seam, uma coisa que me deixou feliz foi a possibilidade de desacoplar JSF e plugar outro mecanismo component based.
PS: Se bem que alguém podia criar renderkit (Flex-Flash) para JSF, pois a evolução do JSF também promete.
Em fim, acho que para aplicações de pequeno e médio porte, sem integração com sistemas legados e um modelo relacional relativamente simples, ele vai muito bem. À partir daí vc tem outras alternativas, como o dito anteriormente - Grails, onde a camada de abstração de dados é realizada pelo Hibernate e na próxima versão será totalmente integrado à JPA.
Hoje ficaria com esse esquema:
-Grails || RoR (Aplicações pequenas e médias para rápida conclusão)
-Seam (Aplicações de médio e grande porte)
Deixando claro que não sou à favor de se usar uma arquitetura pronta pra sopinha para todos os casos.
Em muitos cenários, será necessária a presença de um arquiteto para desenhar uma solução condizente ao problema utilizando Patterns (implementados muitas vezes por frameworks), alguns módulos como SpringIoC, Hibernate, Compass, EJb3, Drools e por aí vai , criando uma estrutura que contemple as necessidades de negócio do cliente.