You do not need to create a custom component in these cases:
You need to register event listeners on components. You can either register event listeners on components using the f:valueChangeListener and f:actionListener tags, or you can point at an event-processing method on a managed bean using the component’s actionListener or valueChangeListener attributes. See Implementing an Event Listener and Writing Managed Bean Methods for more information.
I think we can still use event listeners with custom components. In the Core JSF book, chapter 11, the example shows this: