UIComponent EventListenerWrapper optimizations
----------------------------------------------
Key: MYFACES-3167
URL: https://issues.apache.org/jira/browse/MYFACES-3167
Project: MyFaces Core
Issue Type: Improvement
Components: JSR-314
Affects Versions: 2.1.0, 2.0.6
Reporter: Leonardo Uribe
Assignee: Leonardo Uribe
Our current implementation for EventListenerWrapper class inside UIComponent
works well but it can be better.
This wrapper is used by UIComponent.subscribeToEvent and unsubscribeFromEvent
to handle the case when a listener is the same component, so when the state is
restored, the component could be found using UIComponent.getCurrentComponent().
The spec says that @ListenerFor annotations can be used for both components and
renderers. Why EventListenerWrapper don't do the same trick for renderers?
Since the rendererType does not change over component lifetime (just on init
time), we can expect
UIComponent.getCurrentComponent().getRenderer(facesContext) return the expected
one without need to create it, right?
Other reason to assume the previous trick for renderers, is renderer listeners
are not registered for components that does not use the same renderer. This can
be checked easily looking on ApplicationImpl.createComponent code.
Additionally, EventListenerWrapper could take into account other cases where
the listener implements StateHolde or PartialStateHolder, or even better it can
assume on PSS it is not required to save info and restore the listener, because
the listener is stateless.
The effect of this optimization is h:outputScript and h:outputStylesheet will
return null when saveState() is called and PSS is on, minimizing the state
stored by state saving algorithm.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira