Book Image

JSF 1.2 Components

By : IAN HLAVATS
Book Image

JSF 1.2 Components

By: IAN HLAVATS

Overview of this book

Today's web developers need powerful tools to deliver richer, faster, and smoother web experiences. JavaServer Faces includes powerful, feature-rich, Ajax-enabled UI components that provide all the functionality needed to build web applications in a Web 2.0 world. It's the perfect way to build rich, interactive, and "Web 2.0-style" Java web apps. This book provides a comprehensive introduction to the most popular JSF components available today and demonstrate step-by-step how to build increasingly sophisticated JSF user interfaces with standard JSF, Facelets, Apache Tomahawk/Trinidad, ICEfaces, JBoss Seam, JBoss RichFaces/Ajax4jsf, and JSF 2.0 components. JSF 1.2 Components is both an excellent starting point for new JSF developers, and a great reference and “how to” guide for experienced JSF professionals. This book progresses logically from an introduction to standard JSF HTML, and JSF Core components to advanced JSF UI development. As you move through the book, you will learn how to build composite views using Facelets tags, implement common web development tasks using Tomahawk components, and add Ajax capabilities to your JSF user interface with ICEfaces components. You will also learn how to solve the complex web application development challenges with the JBoss Seam framework. At the end of the book, you will be introduced to the new and up-coming JSF component libraries that will provide a road map of the future JSF technologies.
Table of Contents (14 chapters)
JSF 1.2 Components
Credits
Foreword
About the Author
About the Reviewers
Preface

Displaying data


The JSF framework makes it easy to display tabular data to the user. The HtmlDataTable component abstracts many of the details involved in rendering a data set as HTML. For this reason, it is perhaps the most powerful standard JSF component.

As JSF is based on the Model-View-Controller pattern, it mandates a clear separation of concerns: the data structures and entities of our application are the "Models", the backing beans of our application are the "Controllers", and the UI components and JSF pages that constitute our presentation layer are the "Views".

The HtmlDataTable component is a good example of how JSF implements the MVC pattern. The<h:dataTable> tag renders this component as an HTML table and provides a nice adapter between the presentation and business tiers of our application. The JSF expression language in our JSF page is the glue that binds these two layers together.

The JSF HtmlDataTable component is a very basic data table component. We will see in later chapters a number of more specialized versions of this component included in third-party JSF component libraries that provide more full-featured data grid implementations, enabling advanced features such as column sorting, pagination, drag-and-drop, and more. For now, let's examine the basic functionality of the standard JSF HTML data table component.

Rendering an HTML table

The<h:dataTable> tag adopts a column-based approach to define the HTML table structure. This example shows how to render a list of customers as an HTML table using the<h:dataTable> tag.

<h:dataTable value="#{customerBean.customerList}" var="customer" rowClasses="row-even,row-odd" columnClasses="left-aligned,left-aligned,centered, left-aligned" border="2" cellpadding="5" cellspacing="2" rows="8">
<h:column>
<f:facet name="header">
<h:outputText value="Full Name" />
</f:facet>
<h:outputText value="#{customer.fullName}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Birth Date" />
</f:facet>
<h:outputText value="#{customer.birthDate}">
<f:convertDateTime type="date" dateStyle="medium" />
</h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Phone Number" />
</f:facet>
<h:outputText value="#{customer.phoneNumber}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Country of Origin" />
</f:facet>
<h:outputText value="#{customer.countryOfOrigin.name}" />
</h:column>
</h:dataTable>