Hi arief,
If your completely new to client-side development, there are probably better choices then my book for you. That being said, I've had some folks at work with very minimal client-side experience read my first AJAX book and do alright with it, and I suspect the same would be true for this one if your motivated... I think you'll frequently have to jump on to Google to look something up as you read through it, something your kind of expected to know coming in, but if your willing to do that, and if learning by example is the way you learn best, then you could probably do alright with my book.
As for Flex vs. JSF... your talking to someone that has historically been less than flattering with regard to JSF, so maybe I'm not the person to ask
I think Flex yields fantastic-looking applications, probably better than your going to get any other way other than fat clients. This is a huge plus for many people. I've played with it only a little bit frankly, but it didn't seem tough at all to get your brain around, I doubt you'd have much trouble picking it up. It's pretty much a true cross-platform environment, i.e., Flash is Flash on any platform as far as I'm aware, also a big plus.
JSF is... well... a good idea not done very well, that's my opinion. I had originally wrote a lot more here, but then I realized I got into my typical rantings about JSF
I'd rather not do that, I'd rather try and keep it more technical and concrete, so...
I've personally always found JSF to be overly complex for what it is. I've seen many "simple" JSF examples that to me seemed way too complicated. Now, some claim that while that may be true, JSF makes more complex applications simpler. I'm not so sure about that because I've seen some more complex examples too and they didn't look simpler to me than competing technologies. I'm not a fan of any technology that almost forces you to use tooling to make it usable, and JSF it squarely in that category. This isn't to imply you can't pop open a text editor and write a complete JSF app, because of course you absolutely can, but for it to be something you'd *want* to use, my opinion is JSF requires tooling. I'm personally someone who still greatly prefers a good text editor to an
IDE (and frankly can be just as productive, maybe more so, without all the tools trying to hold my hand and think for me all the time), so for me that's a big negative with JSF.
Ultimately though, when comparing JSF to Flex specifically, Flex wins again in the looks department, and in the UI richness department. Your just not going to get as rich a UI with current web technologies, of which JSF is ultimately dependent, than you are with Flex.
If you surmise that I like Flex quite a bit, you'd be partially right... I like the *IDEA* of Flex a great deal... Flex worries me though because, even with the recent open-source announcement, it's still essentially a closed platform. It's still based on Flash, which is 100% proprietary. This worries me. I'm also not thrilled with the idea of all my developers having to learn a whole new technology (although arguably they have to do that now with AJAX and more clien-oriented coding). I also frankly don't like the pricing model for the Flex toolset, it's just too much IMO... then again, to my previous point, I shouldn't *need* the tools to do Flex, and indeed you don't, but again as with JSF, it makes things better. Although, I will say that in my opinion, developing a Flex app without tooling is a FAR less painful exercise than doing the same with JSF.
Flex is something I'm keeping my eye on, that's the bottom line, whereas JSF is something that has already failed to meet its lofty goals IMO. A future rev of JSF may be more interesting to me, but it would have to change quite a bit for that to be the case.
Right now, for me at this moment, if I'm starting a new project, this is the order of preference for how I'd build it:
1. Standards-based AJAX-type applications with a
Struts back-end (or DWR instead of Struts, which is a fantastic tool too)
2. Flex
JSF would be a very distant 3rd... heck, I'd probably flip to the dark side and do .Net before I did JSF
To me, .Net is JSF done well.
(Ok, seems I got off on that rant a bit anyway!)