The address-book example application is a simple web application that
stores contact data. It uses a single entity class, Contact, that uses
the Java API for JavaBeans Validation (Bean Validation) to validate the
data stored in the persistent attributes of the entity, as described in
Validating Persistent Fields and
The Contact entity uses the @NotNull, @Pattern, and @Past
constraints on the persistent attributes.
The @NotNull constraint marks the attribute as a required field. The
attribute must be set to a non-null value before the entity can be
persisted or modified. Bean Validation will throw a validation error if
the attribute is null when the entity is persisted or modified.
The @Pattern constraint defines a regular expression that the value of
the attribute must match before the entity can be persisted or modified.
This constraint has two different uses in address-book.
The regular expression declared in the @Pattern annotation on the
email field matches email addresses of the form name`@domain
name.top level domain, allowing only valid characters for email
addresses. For example, `firstname.lastname@example.org will pass validation, as
will email@example.com. However,
firstname,firstname.lastname@example.org, which contains an illegal comma
character in the local name, will fail validation.
The mobilePhone and homePhone fields are annotated with a
@Pattern constraint that defines a regular expression to match phone
numbers of the form (`xxx)` xxx`-`xxxx.
The @Past constraint is applied to the birthday field, which must be a
java.util.Date in the past.
Here are the relevant parts of the Contact entity class:
The constraints in Contact, however, are strings in the resource
bundle ValidationMessages.properties, under
_tut-install_/examples/persistence/address-book/src/java/. This allows
the validation messages to be located in one single properties file and
the messages to be easily localized. Overridden Bean Validation messages
must be placed in a resource bundle properties file named
ValidationMessages.properties in the default package, with localized
resource bundles taking the form
ValidationMessages_`locale-prefix.properties`. For example,
ValidationMessages_es.properties is the resource bundle used in
Validating Contact Input from a JavaServer Faces Application
The address-book application uses a JavaServer Faces web front end to
allow users to enter contacts. While JavaServer Faces has a form input
validation mechanism using tags in Facelets XHTML files, address-book
doesn’t use these validation tags. Bean Validation constraints in
JavaServer Faces managed beans, in this case in the Contact entity,
automatically trigger validation when the forms are submitted.
The following code snippet from the Create.xhtml Facelets file shows
some of the input form for creating new Contact instances:
The <h:inputText> tags firstName and lastName are bound to the
attributes in the Contact entity instance selected in the
ContactController stateless session bean. Each <h:inputText> tag has
an associated <h:message> tag that will display validation error
messages. The form doesn’t require any JavaServer Faces validation tags,
Running the address-book Example
You can use either NetBeans IDE or Maven to build, package, deploy, and
run the address-book application.