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 ...

Get JavaServer Faces now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.