Struts 2 is an Action Framework whereas JSF is a Component Framework.
An Action Framework is intimately tied to the HTTP request cycle and request format. A Component Framework tends to hide the underly HTTP request and use its own, higher level abstraction.
Action Frameworks tend to work better in stateless environments, Component Framework typically have a lot of session state associated with them.
If you’re going to do a “web site”, where URLs are important, lots of read only, higher loads of simpler traffic, etc. then an Action Framework may be more suitable.
If its a back office application, lots of CRUD screens, not as many users, complicated page and workflows, lots of page component interaction, then a Component Framework will be more suitable.
Both frameworks can do both jobs, just some are easier for the coder than the other for certain tasks.