background image

Binding a Component Instance to a Bean Property

<< Retrieving Values | Binding Converters, Listeners, and Validators >>
<< Retrieving Values | Binding Converters, Listeners, and Validators >>

Binding a Component Instance to a Bean Property

Binding a Component Instance to a Bean Property
A component instance can be bound to a bean property using a value expression with the
binding
attribute of the component's tag. You usually bind a component instance rather than
its value to a bean property if the bean must dynamically change the component's attributes.
Here are two tags from the bookcashier.jsp page that bind components to bean properties:
<h:selectBooleanCheckbox
id=
"fanClub"
rendered=
"false"
binding=
"#{cashier.specialOffer}" />
<h:outputLabel for=
"fanClub"
rendered=
"false"
binding=
"#{cashier.specialOfferText}"
>
<h:outputText id=
"fanClubLabel"
value=
"#{bundle.DukeFanClub}"
/>
</h:outputLabel>
The selectBooleanCheckbox tag renders a check box and binds the fanClub UISelectBoolean
component to the specialOffer property of CashierBean. The outputLabel tag binds the
component representing the check box's label to the specialOfferText property of
CashierBean
. If the application's locale is English, the outputLabel tag renders:
I
'd like to join the Duke Fan Club, free with my purchase of over $100
The rendered attributes of both tags are set to false, which prevents the check box and its label
from being rendered. If the customer orders more than $100 (or 100 euros) worth of books and
clicks the Submit button, the submit method of CashierBean sets both components' rendered
properties to true, causing the check box and its label to be rendered.
These tags use component bindings rather than value bindings because the backing bean must
dynamically set the values of the components' rendered properties.
If the tags were to use value bindings instead of component bindings, the backing bean would
not have direct access to the components, and would therefore require additional code to access
the components from the FacesContext instance to change the components' rendered
properties.
"Writing Properties Bound to Component Instances" on page 388
explains how to write the
bean properties bound to the example components and also discusses how the submit method
sets the rendered properties of the components.
Binding Component Values and Instances to External Data Sources
The Java EE 5 Tutorial · September 2007
368