I had to go through this process almost a year ago. I went the PrimeFaces route because:
1. It is compatible with other component libraries. It was the case at the time that ICEFaces
was not compatible with PrimeFaces or RichFaces, but you can use PrimeFaces and RichFaces
components on a "pick and mix" basis. I just use vanilla JSF (Mojarra) and PrimeFaces
components in my application now so can't comment on inter-operability as things stand,
however this was my understanding then.
2. PrimeFaces had a JSF 2 ready version out very quickly, I can't recall exactly when but I
can recall that Glassfish v3 was released with JSF 2 on December 9th 2009, and RichFaces
are still on a development milestone release at this time. I had never anticipated that this
was going to take so long when I was making architecture decisions last year.
3. PrimeFaces is very easy to integrate with your application. Just download the jar, add it
to the classpath and you don't even need to change the deployment descriptor (or maybe
there was one thing).
4. There is a very supportive user community.
5. In addition to the primefaces forum you have the showcase which has source code on
the page, the user guide, and all the source code is available if you're keen enough.
6. NetBeans integration - this is what I use (NetBeans) and all the taglibs get picked up
from the jar when it's in your classpath and then you can see which tags and attributes
are available (i.e. type "<p:" & CTRL+SPACE), without any mucking about.
I just went back and read the post and noticed your questions regarding ajax and
efficiency. I use ajax extensively with primefaces components and it works fine. A lot
of components have built in ajax capability, such as p:datatable which allows you to
specify a component to update (update=) which is equivalent to using a child (or parent)
f:ajax render= tag. I've no idea about efficiency, my approach at present is "make it
work first before you make it work fast", truer words I've never heard.
It's important to look beyond just components when comparing these component libraries. It's safe to assume that most have very similar components at this point.
RichFaces 4 is more than just a component library, it's a rich framework for JSF providing:
Over 100 rich and Ajax components
Client-side validation (extension to Bean Validation)
CDK (Component Development Kit)
RichFaces 4 is JSF 2 based with a CR (Candidate Release) version out very soon. From there, we are just a few weeks from the final version. I know version 4 took a little longer than everyone expected but this version is more than just a typical update. It’s a significant upgrade that includes the following:
All component were reviewed for consistency, usability, and redesign following semantic HTML principles
Both server-side and client-side performance optimization
Strict code clean-up and review
New and easier to use CDK (Component Development Kit)
I think it's well worth the extra wait.
Installing RichFaces 4 has been simplified as well. Just drop the Jars into your project, nothing to register in web.xml file anymore.
If you look at Ajax features in JSF 2, then you can see it was greatly inspired by the RicihFaces a4j:support tag. Plus, many components have Ajax built in as well.
The RichFaces community is very active and always willing to help. And don’t forget that RichFaces is backed by JBoss and Exadel.
RichFaces might not have the shiniest components. It wasn’t the first with JSF 2 support. (This argument will be mute in about 1 months). But, probably most important, keep in mind that RichFaces is used in thousands of projects and has been proven in small, large, and enterprise projects throughout the years.