I'd suggest JavaServer Faces 2.0: A complete reference by Burns & Schalk. I'm only up to page 150 so far
but it all seems to hang together in a fairly logical fashion and the contents are clearly comprehensive.
Ignore the reference to the mythical chapter 17 on page 100, it does not exist!
It depends on which version of JSF you are interested in learning. For JSF 1.2, the best book in my opinion is Core JavaServer Faces. The JSF in Action book referred to earlier has not been updated to JSF 1.2, and is rather out of date (although, to be fair, it's good for what it covers). JavaServer Faces: The Complete Reference is an excellent book, but suffers from the unforgivable sin of having the world's worst index. If you simply read it sequentially and make your own plastic tabs for important topics, it's excellent. JavaServer Faces 2.0: The Complete Reference is the best (or, more accurately...the ONLY) book for JSF 2.0, and the index has been improved to the point where it's actually useful. However, there is a lot of information in this version that will simply confuse you if you are targeting JSF 1.2.
Good luck. I've always felt that no single book ever does the trick.
If you're going to learn JSF and you're not constrained by additional requirements then I'd suggest that
you learn JSF 2.0 primarily because you'll be using Facelets rather than JSP and there's some good
templating and composite component technology in there.
Well, I kind of agree with the previous poster...and I kind of don't. Currently, there is one server that directly implements JSF 2, and that is Glassfish 3. Don't expect support in any other server for some time...eventually, JBoss will have it, and Weblogic, and far (FAR) down the line Websphere. Tomcat can run JSF 2, but it's not a complete application server.
So my feeling is: current JSF production will be focusing primarily on JSF 1.2, certainly for the next year, and maybe longer. But JSF 2 has some very nice features, and if you can target Glassfish or Tomcat 6, you should definitely go that route.
I agree with Tom on the JSF 1.2 or 2.0 choice. However, if you choose JSF 1.2, you should use it in a way that is "JSF 2.0 like". That means e.g. using Facelets instead of JSPs, among other things. My book is written with this approach in mind. The benefits are that you are preparing yourself to using JSF 2.0 in the future and that your code will be easier to migrate to JSF 2.0 in the future.