Using Other Custom Classes
In the next chapter, we’ll look at how
to develop custom components in addition
to custom renderers. Custom renderers and components are, however,
not the only types of classes that you can plug into JSF. As
I’ve mentioned before, pretty much everything in JSF
is pluggable. You can replace the default
ActionListener,
NavigationHandler,
VariableResolver,
PropertyResolver, ViewHandler,
and StateManager implementation classes. If a
custom version of any of these classes has a constructor that takes
an argument of the same type, JSF uses that constructor and passes in
the previously registered instance as the argument. This makes it
easy to provide a custom class that implements only some of the
methods and delegates the rest to the previous instance.
I’ll show you an example of how to do this for a
custom ViewHandler in Chapter 15.
A custom VariableResolver can be used to add
implicit EL variables, such as an implicit variable named
now that holds a java.util.Date
instance for the current time. A custom
PropertyResolver can add support for custom
properties or data types not supported out of the box, such as a
pseudo-property named ids for objects of type
UIComponent to hold a
java.util.Map with all children keyed by their
IDs. This would make it easy to access components by their ID in a
JSF EL expression, e.g.,
#{view.ids.form.ids.input} would access a
component with the ID input nested within a
component with the ID form.
Custom ActionListener and
NavigationHandler ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access