HTML and CSS Reference
This chapter will explain what the JavaServer Faces (JSF) framework is, how the framework evolved over time, key
aspects of its architecture, and details about its signature request processing life cycle. Beyond explanations, we'll go
hands-on and guide you through your first JSF application from scratch using JSF 2.1 and Maven 3; you will learn how
to deploy your JSF 2.1 application on two different web containers (GlassFish and Tomcat). If you are already familiar
with JSF at a basic component level, a deeper understanding of the request life cycle will serve you well when tasked
with more complex applications.
What Is JSF?
JSF is a server-side component-oriented Java web framework that simplifies the process of developing rich Java
enterprise web applications. JSF excels at delivering a highly customizable yet standardized approach to building
application user interfaces. The user interface tier is usually the most challenging and variable part of any application.
It is also the difference between a successful application that is widely adopted and evolved consistently versus one
that is reluctantly adopted and frequently changed to meet user desires.
JSF provides a powerful platform for solving the common problems that frequently appear during Java enterprise
web application development, such as validation, conversion, navigation, templating, and page flows. Providing a
standard way for resolving the common problems of web application development makes JSF an excellent framework
that reduces the development and maintenance time of web applications.
This is especially true when your development team is large and distributed, a common scenario encountered
in the enterprise. Building user experiences around a set of standardized JSF components allows for a fair degree of
customization and expression, but also establishes a “shared DNA” for how an application should look, behave, and
respond across different implementations.
JSF offers APIs and tag libraries for
Providing UI components for rapid development of applications.
Wiring component events into Java server-side code.
Binding UI components with POJOs (Plain Old Java Objects).
Providing a set of useful built-in validators and converters, and offering a mechanism for
creating custom ones in order to fulfill specific requirements.
Handling navigation between application pages.
Creating page templates and application templates.
Defining page flows in a manner that reflects application requirements.