Specifying the components for execution and re-rendering is very limited. Identifying components outside of a naming container is restricted to absolute component id paths. This is not very flexible. In combination with composite components this leads to requiring knowledge about the tree structure outside of the composite component. This breaks encapsulation.
This simple example is not possible at the moment:
<h:commandLink id="inner" value="Ajax">
<f:ajax render="outside" />
There should be a much more flexible solution.
Furthermore the concept of solely defining the components that take part in a partial (AJAX) request (execute and render) by parameters submitted by the client is very limited.
There should be an option to dynamically decide on the server which components take part in the partial request. At the moment the client is responsible to send these ids.
AJAX requests for example could have a logical name. Components could receive an event or register a listener at the view root that can in turn decide whether the component has to participate in the request or not. This could ease the initially described limitation and allows loosely coupled ajaxified parts of the view.
Maybe this is a usecase for server-side behaviors?