This question can not be answered in general, so I very much disagree with Paul's answer. The answer may very well be "neither".
Note that the widely used version of Struts is Stuts 1, which has been dead (as a project) and thus obsolete (for new projects) for quite some time. Struts 2 is not nearly as widely used; I recommend to learn it only if you already know that you will need it.
As regards JSF, it has proponents and detractors. Most of its proponents seem to like it because it's part of JEE (not a good reason in my book, as other frameworks can easily be used with JEE), and not necessarily for its technical merits. Its detractors seem to have strong opinions about not liking it.
Enthuware Software Support
posted 5 years ago
Ulf Dittmer wrote:This question can not be answered in general....
I have seen similar answer many times on this forum and I always find it annoying. You can always answer based on the information posted by the OP. Of course, the more information OP posts the more "correct" the answer can be. Why, you might even ask for the age of the poster to make your answer even more "correct". But that doesn't make any sense. I would rather OP ask further questions than the responder ask for more information.
OP's question is simple and I find such winding answers practically useless.
No one will need to learn either; let alone both. While I've familiarized myself with both so that I can make informed decisions, I've never used either in a project. In fact, more than a handful of my jobs have been to take monstrosities developed in either (especially JSF) and refactor them into more manageable projects.
So while I would say that it's never a bad idea to learn something new, no one needs to learn either.
As to which is "better": that's unanswerable and subjective. My own opinion is obviously neither. If I have to recommend a framework, I'd recommend either of Play! or SpringMVC before Struts 1 or 2. And I'm on the record as thinking that JSF is a cancer that needs to be surgically excised from the face of the Earth.
In the past (6-7 years ago) I developed web applications with both Struts (version 1) and JSF. But today I would recommend neither for web application development. Without any doubt my recommendation is Spring MVC when you are looking for a framework to develop web applications. Since 2012 I develop mainly web applications and all of them were developed using Spring, Spring MVC and Hibernate.