JSF Component Model
As discussed previously, components are used to build JSF views, rather than mark-up documents. The coding paradigm for UI components is based on the JavaBeans model. You set property values or attributes to define state and attach listeners to respond to value changes or other events, thereby defining behavior.
Some components can be nested. In most cases, the purpose of nesting components is to provide a layout for other components, such as a table, within a view. UI components are standardized within JSF, so you can mix and match components from different vendors. However, if you do so, you may not be able to achieve a standard look and feel or be able to support internationalization.
JavaServer Faces includes:
UI components: Server-side objects that are independent of the target client and render back to the client using external renderer classes; consist of attributes, behaviors, and renderers
Renderers: Classes that reside on the server and are responsible for displaying the UI component in a graphical representation that is understood by the client
Render Kits: Renderer classes packaged into libraries that enable you to develop a JSF application for different client devices (such as browsers or mobile devices) without altering application code. A render kit for an HTML client is part of standard JSF.