What is the difference between JSF Implementations and Component Libraries?
Jakarta Faces implementations implement the Jakarta Faces Specification which in turn is part of Jakarta EE (formerly known as Java EE). They contain at least the standard components to display any of the available basic ("plain vanilla") HTML elements. In other words, the <ui:xxx>
, <h:xxx>
, <f:xxx>
tags are provided by the Jakarta Faces implementation.
Jakarta Faces component libraries just add 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. They provide tags in their own namespace, such as PrimeFaces with <p:xxx>
tags.
See also:
What are the various JSF implementations that are available and what is the difference between each one of them?
There are so far two (major) Jakarta Faces implementations, namely Eclipse Mojarra and Apache MyFaces. There's technically not much difference as they both simply have to adhere the Jakarta Faces Specification. Rather look at robustness, performance, availability of documentation, type of license, level of support, grade of maintenance (speed of enhancements, bugfixes, releasing, etc), etcetera.
See also:
What are the various JSF component libraries 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) or BootsFaces (demo). Previously there was also RichFaces, but this is is EOL since 2016. If you want more ajaxical capabilities (other than what standard Jakarta Faces 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 Faces 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 Jakarta Faces-specific problems. OmniFaces (demo) and DeltaSpike provide a reuseable standard library of Faces utilities which can be used in combination with any Jakarta Faces implementation and component library.