JavaServer Faces (JSF) is a Java specification for building component-based user interfaces. It facilitates the creation of web applications with a great system of components, templating and Ajax communication. It can be complemented by libraries such as PrimeFaces or RichFaces to provide advanced components. Spring Web Flow can be used to improve the flow of the application.
My experience with JSF consists in the creation of web interfaces for administrative, financial and management systems. These applications have been implemented with JSF 2, JSF 1.2, Primefaces, RichFaces and Spring Web Flow.
In summary, I think JSF is a robust library, widely used and a standard of Java that can be a very good solution to build user interfaces in an easy way. Many developers prefer restful frameworks but I still think that JSF is the best solution for many applications and specially with the improvements of JSF 2. If you decide to use it for your project, my suggestion is to combine it with PrimeFaces and Spring Web Flow.
If you are interested in JSF for the user interface of your web application, you can contact Walfen on email@example.com.