Matthias published an article on DZone about the new ADF Faces components - and one of the replies there asked how would you choose among the various JSF Ajax-enabled set of components.
I tried to give some pointers in a reply I posted there, and then I figured out that this might actually make for a good blog entry so here we go:
I think there are various things you can look at when choosing your component set:
One of them would be the number and functionality of the components the framework offers - unfortunately, mixing JSF components from different vendors in the same project can be challenging and the Ajax functionality just adds more complexity with a risk of different framework handling the Ajax interaction and client side life cycle in different ways. This in many cases prevents you from mixing two component sets on the same page. So a clear conclusion is to look for a framework that include as many components as possible - so the need to step out of it would be minimized if not eliminated. As far as I know ADF Faces with over a 150 components has the largest number of components out there.
Beyond just the pure components names - it is worthwhile checking their functionality. Every component set has a table component - but does the table allow you to scroll with a scroll bar? When it does scroll how is data updates to the UI handled? Is the table fetching all the records if you just scroll to the end - or does it fetch only a set of records making network more efficient?
Does the table allow you to sort on columns, merge columns, rearrange columns etc.
You get the point - don't just look at the name of the component - look at the behavior.
Another aspect to evaluate is the functionality that the framework provides beyond components and that it let you add to your application. This would be things like drag and drop support, pop-up and dialog windows, menus, templating, skinning, accessibility, internalization etc.
Just as an example ADF Faces enables you to add drag and drop between components by simply adding two tags - a drag source and a drag target.
Yet another criteria for choosing might be the actual underlying architecture used for achieving the Ajax behavior. Some components for example use client side manipulation, some use server side and some use a hybrid approach. These aspect can influence the end result in terms of performance.
Other factors can be IDE support and development experience. Do you have to code everything or do you get visual editing even for ajax components - for example can you edit different tabs/accordion areas visually?
Framework integration - what options do you have to integrate with advance back-end framework for data binding, advance controller layer etc.
License/Price, support, consulting and training, community around the components, active discussion forum, documentation samples etc.
Well no one said it is going to be an easy task - but I can at least tell you which set of component Oracle chose for their next generation enterprise applications - that would of course be ADF Faces.