O objetivo de ambos os frameworks é facilitar a implementação da lógica da parte de visão e implementar a divisão da lógica de visão e da lógica de negócios. Para comparar as duas tecnologias vamos comparar alguns quesitos importantes.
Um fator muito importante para arquitetos de software é o risco que se tem em um projeto. E podemos dizer que com relação ao numero de desenvolvedores Struts ganha e muito de JSF. Para tomar a decisão entre usar ou não esta tecnologia é bom conhecer a equipe de desenvolvimento do projeto em questão.
Outro fator importante é a maturidade do framework. Temos hoje vários sistemas em produção utilizando a tecnologia Struts enquanto temos uma quantidade bem menor de sistemas em produção utilizando JSF. Apesar de JSF ter evoluído bastante nestes últimos anos, temos que Struts ainda possui uma maturidade maior.
Com relação à evolução do framework JSF ganha de lavada, por se tratar de uma especificação. O Struts original parou na versão 1.3.9 e mudou totalmente de conceito na versão 2.0 em que foi substituído pelo framework WebWork apenas por questões de marketing.
Outro ponto que JSF ganha de lavada é com relação à maior flexibilidade do controle e o tratamento de eventos. Utilizando JSF não é necessária a extensão das classes Action e nem a utilização de formulários o que simplifica o desenvolvimento por tirar camadas desnecessárias.
Com relação à navegação tanto Struts quanto JSF são bem flexíveis, mas JSF supera devido ao fato das regras de navegação estar desacopladas das ações. Além disto, com JSF é mais fácil ter uma página com várias regras de navegação uma vez que não é necessária a utilização de ifs e elses.
Com relação à integração e extensibilidade mais pontos para JSF. Struts é neutro neste ponto, possuindo integração com apenas poucos frameworks, enquanto JSF possui integração com vários frameworks.
Com relação ao desenvolvimento de páginas temos mais ferramentas RAD para o desenvolvimento JSF, uma vez que o framework foi feito se pensando neste ponto. Outro fator a ser considerado é o apoio de grandes empresas. JSF tem tido o apoio de grandes empresas como IBM, Oracle e Red Hat o que torna a adoção ao framework maior, uma vez que dá o aval que o framework irá crescer e evoluir.
Uma desvantagem de JSF é o fato de ser menos transparente do que Struts. Com JSF existem muito mais coisas acontecendo por trás das cenas do que aplicações feitas em Struts, o que faz com que JSF seja mais difícil de entender e mais difícil de verificar a performance e otimizar.
E agora? O que vamos usar para decidir entre as duas tecnologias? Se vamos começar um projeto hoje, devemos considerar vários fatores. Se você não tem muito tempo para realizar a avaliação de frameworks e não tem uma equipe qualificada para a utilização de JSF decida por utilizar o framework Struts. Mas por uma visão estratégica, por ser uma tecnologia que irá evoluir, ter apoio das grandes empresas de mercado e por existirem ferramentas de desenvolvimento rápido eu encorajo a utilização de JSF.