What is the difference between JSF Implementations and Component Libraries?
JSF implementations implement the JSF API Specification. They contains at least the standard components to display any of the available basic ("plain vanilla") HTML elements.
JSF component libraries just adds that extra on top of the basic implementation, often with more skinnability, ajaxability, enhanceability, etcetera, so that you can just program it with a single component instead of a bunch of components or custom components, eventually along with a bunch of related JS/CSS code.
What are the various JSF implementations (like Eclipse Mojarra and Apache MyFaces) that are available and what is the difference between each one of them?
There are as far two (major) JSF implementations, namely Eclipse Mojarra and Apache MyFaces. There's technically not much difference as they both just have to adhere the JSF API Specification. Rather look at robustness, availability of documentation, level of support, grade of maintenance (speed of enhancements, bugfixes, releasing, etc), etcetera. See also: Difference between Mojarra and MyFaces.
What are the various JSF component libraries (like PrimeFaces, ICEfaces and RichFaces) that are available and what is the difference between each one of them?
There are lot of them, I'll limit myself to the most used / well known libraries. If you want more skinning capabilities, look at PrimeFaces (demo), ICEfaces (demo), ButterFaces (demo) or BootsFaces (demo). RichFaces is EOL since 2016. If you want more ajaxical capabilities (other than what standard JSF already provides), look at PrimeFaces, ICEfaces or BabbageFaces. If you want more specialized/enhanced components, look at PrimeFaces, ICEFaces, PrimeFaces Extensions (demo) or Tobago (demo). The difference is mainly to be found in the available set of components and the degree of customizability.
Further there are also JSF utility libraries. You'll probably recognize yourself reinventing/rewriting some FacesUtil
, JSFUtils
, etc classes everytime and/or custom tags/components to solve typical and recurring JSF-specific problems. OmniFaces (demo) and DeltaSpike provide a reuseable standard library of JSF utilities which can be used in combination with any JSF implementation and component library.