Bom, o Tapestry eu nunca usei.
La vai minha opinião:
Se seu projeto tem um tempo confortável ou é para fins de aprendizado eu diria para usar o JSF.
Reutilização de componentes é algo que te salva muito tempo sem contar os pré-prontos (A implementação de referência tem uns 20, mas a da oracle que voc6e pode baixar e usar na boa ta nos seus 85 componentes visuais, como por exemplo alguns tipos de calendários, mapa de imagem automático e muitas outras coisas interessantes para você usar com apenas uma tag).
Outra vantagem é poder puxar o Java Studio Creator e fazer pagina JSF como se fosse o Dreamweaver ou FrontPage, clica e arrasta pra montar o layout. (Clica e arrasta componentes JSF e não html). Sem contar que a parte de tratamento de eventos, validaçòes e conversões são animais.
JSF + Hibernate detona 
Com pouco tempo eu diria Struts.
Menos recursos dentro do framework porém mais fácil de se aprender que o webwork e você encontra muito mais documentação e exemplos por ai. A grande maioria de pessoas usa o Struts. Tecnologicamente eu acho o WebWork melhor, mas no ponto de vista de um projeto corrido para empresa eu escolheria Struts se não tivessa prazo, pois hoje não teria como contratar uma equipe toda que ja soubesse JSF
.
Em relação a recursos do framework e melhorias tecnologicas eu diria
1 - JSF
2 - WebWork
3 - Struts
(Cabei de instalar o Tiger rawrrr, generics time)