a4j:keepAlive extends the live cycle for request scope beans. In general, each Ajax
request works inside the own request scope. Therefore, the state of the component
tree rendered based on the variable from one request scope does not correspond to the
state of the same tree processed during the next Ajax request. This causes one of
the most widespread problem when the form elements (buttons or fields) can't be correctly proceeded with Ajax if the 'rendered' attribute is mapped to the request scoped variable
Using the session scope variables solves the above mentioned problem. However,
using a session scope might be inappropriate from the architectural point of view.
a4j:keepAlive allows to reuse the same value for a request scope bean between
several Ajax requests.
beanName attribute references to a request scope bean name you'd like
to re-use during the Ajax requests.
ajaxOnly attribute is a flag that declares whether the value of the bean
should be available during a non-Ajax request. If ajaxOnly="true", a request
scope bean will keep the same value during Ajax requests from the given page, but
it will be re-created as a regular request scope bean when a non-Ajax request
will send from this page.