This example will not work as expected. The expression for 'enabled' attribute equals true only after UPDATE model phase when the rsBean properties are updated with submitted values. So, the component is rendered as enabled on the RENDER RESPONSE phase.
However, those values do not make sence during the next Ajax request. The rsBean is created from scratch as soon as it is a new request. JSF makes a decision what is process on the second (APPLY VALUES) phase. At this moment, the expression for 'disabled' still equals false. Therefore, the processing for button is bypassed. The action does not invoked as a result. phase This example will work properly. The code is almost the same as for example on the left. Used managed been is based on the same class. The only difference is a4j:keepAlive beanName="rsBean2". This statment declares to keep the value of the rsBean2 between the Ajax requests.
The rsBean2 is still a request scope bean as it is defined in the faces-config.xml file. a4j:keepAlive stores the rsBean at the end of the JSF lifecycle. At the beginning of the next cycle, it updates with the rsBean2 with the stored data. Therefore, the expression for 'disabled' equals true on the second phase. The button is processed and the action is invoked.