Since JSF is focused on user interface components and the view layer, it overlaps with Struts' functionality but doesn't replace it. For existing and future projects, you can either use Struts and JSF together, use only Struts (especially if you already have a mature application), or use JSF by itself. Struts has quite a few features, like Tiles, the Validator framework, application modules, and so on, that make it quite compelling. However, for simpler applications, JSF has enough support for controllers and navigation to make it quite useful by itself. In general, JSF alone is suitable for smaller applications. For more complicated applications, it may make sense to use JSF with a more powerful back-end framework, like Struts. If you're maintaining an existing project, you have a choice of either integrating with JSF (which is logical if you have a lot of GUI components), or just sticking with Struts. Craig McClanahan recently published a presentation on this topic.