type=page
status=published
title=Binding Converters, Listeners, and Validators to Managed Bean Properties
next=jsf-configure.html
prev=jsf-custom013.html
~~~~~~
Binding Converters, Listeners, and Validators to Managed Bean Properties
========================================================================

[[BNATM]]

[[binding-converters-listeners-and-validators-to-managed-bean-properties]]
Binding Converters, Listeners, and Validators to Managed Bean Properties
------------------------------------------------------------------------

As described in link:jsf-page002.html#BNARF[Adding Components to a Page
Using HTML Tag Library Tags], a page author can bind converter,
listener, and validator implementations to managed bean properties using
the `binding` attributes of the tags that are used to register the
implementations on components.

This technique has similar advantages to binding component instances to
managed bean properties, as described in
link:jsf-custom013.html#BNATG[Binding Component Values and Instances to
Managed Bean Properties]. In particular, binding a converter, listener,
or validator implementation to a managed bean property yields the
following benefits.

* The managed bean can instantiate the implementation instead of
allowing the page author to do so.
* The managed bean can programmatically modify the attributes of the
implementation. In the case of a custom implementation, the only other
way to modify the attributes outside of the implementation class would
be to create a custom tag for it and require the page author to set the
attribute values from the page.

Whether you are binding a converter, listener, or validator to a managed
bean property, the process is the same for any of the implementations.

* Nest the converter, listener, or validator tag within an appropriate
component tag.
* Make sure that the managed bean has a property that accepts and
returns the converter, listener, or validator implementation class that
you want to bind to the property.
* Reference the managed bean property using a value expression from the
`binding` attribute of the converter, listener, or validator tag.

For example, say that you want to bind the standard `DateTime` converter
to a managed bean property because you want to set the formatting
pattern of the user's input in the managed bean rather than on the
Facelets page. First, the page registers the converter onto the
component by nesting the `f:convertDateTime` tag within the component
tag. Then, the page references the property with the `binding` attribute
of the `f:convertDateTime` tag:

[source,oac_no_warn]
----
<h:inputText value="#{loginBean.birthDate}">
    <f:convertDateTime binding="#{loginBean.convertDate}" />
</h:inputText>
----

The `convertDate` property would look something like this:

[source,oac_no_warn]
----
private DateTimeConverter convertDate;
public DateTimeConverter getConvertDate() {
    ...
    return convertDate;
}
public void setConvertDate(DateTimeConverter convertDate) {
    convertDate.setPattern("EEEEEEEE, MMM dd, yyyy");
    this.convertDate = convertDate;
}
----

See link:jsf-develop002.html#BNAUL[Writing Properties Bound to
Converters, Listeners, or Validators] for more information on writing
managed bean properties for converter, listener, and validator
implementations.


