Я использовал Richfaces 4, но я думаю, что применима та же теория.
Вы не присоединяете событие к командной кнопке как таковой, но к событию ajax, которое создается нажатием кнопки (при условии, что onclick возвращает true)
На самом деле JSF выполняет магию, что если этот компонент запускает действие, он вызывает JS при рендеринге ajax.
По сути, до щелчка ничего не делается, это реально атрибут на стороне сервера.
Richfaces (минимум 4) расширяет обычный объект JSF ajax (javascript), и я верю, что вы можете прикрепить к нему свой обработчик. Но это может не оказать вам никакой реальной помощи. Мне пришлось прикрепить к нему обработчик, чтобы исправить некоторые проблемы с состоянием представления.
Вы всегда можете прикрепить функцию к завершению на кнопке, которая ссылается на необязательно существующую функцию.
так <a4j:commandButton ... oncomplete="foo()"/>
и затем на любой странице, включающей эту кнопку, вы можете определить эту функцию. Не самое лучшее решение, но, возможно, будет лучшим выбором.