Table of Contents
This chapter describes the Vaadin Data Model and shows how you can use it to bind components directly to data sources, such as database queries.
The Vaadin Data Model is one of the core concepts of the library. To allow the view (user interface components) to access the data model of an application directly, we have introduced a standard data interface.
The model allows binding user interface components directly to the data that they display and possibly allow to edit. There are three nested levels of hierarchy in the data model: property, item, and container. Using a spreadsheet application as an analogy, these would correspond to a cell, a row, and a table, respectively.
The Data Model is realized as a set of interfaces in the
com.vaadin.data
package. The package contains the
Property
, Item
, and
Container
interfaces, along with a number of more
specialized interfaces and classes.
Notice that the Data Model does not define data representation, but only interfaces. This leaves the representation fully to the implementation of the containers. The representation can be almost anything, such as a plain old Java object (POJO) structure, a filesystem, or a database query.
The Data Model is used heavily in the core user interface components of
Vaadin, especially the field components, that is, components that implement
the Field
interface or more typically extend
AbstractField
, which defines many common features. A
key feature of all the built-in field components is that they can either
maintain their data by themselves or be bound to an external data source. The
value of a field is always available through the
Property
interface. As more than one component can be
bound to the same data source, it is easy to implement various viewer-editor
patterns.
The relationships of the various interfaces are shown in Figure 9.2, “Interface Relationships in Vaadin Data Model”; the value change event
and listener interfaces are shown only for the Property
interface, while the notifier interfaces are omitted altogether.
The Data Model has many important and useful features, such as support for
change notification. Especially containers have many helper interfaces,
including ones that allow indexing, ordering, sorting, and filtering the
data. Also Field
components provide a number of
features involving the data model, such as buffering, validation, and lazy
loading.
Vaadin provides a number of built-in implementations of the data model interfaces. The built-in implementations are used as the default data models in many field components.
In addition to the built-in implementations, many data model implementations, such as containers, are available as add-ons, either from the Vaadin Directory or from independent sources. Both commercial and free implementations exist. The JPAContainer, described in Chapter 18, Vaadin JPAContainer, is the most often used conmmercial container add-on. The installation of add-ons is described in Chapter 15, Using Vaadin Add-ons. Notice that unlike with most regular add-on components, you do not need to compile a widget set for add-ons that include just data model implementations.