This is a fuller solution to ICE-8180 / ICE-8223, and uses lessons learned from them, as well as some of the code developed in them, although re-architected.
Extend TagHandler instead of BehaviorHandler, which involves directly implementing code instead of delegating to opaque JSF impl class. Also adds the concept of having nested (f:ajax is child of another tag), and wrapped (f:ajax is the parent of other tags) scenarios. Can more directly setup the created AjaxBehavior instance. And there's a subtle difference of treating a composite component parent as potentially a ClientBehaviorHolder itself. Not sure if that was relevant though.
Investigated Mojarra and MyFaces techniques of having f:ajax work both in a nested, and wrapped scenarios. Found way of interoperating with Mojarra for all nested scenarios, but only some with MyFaces. More work could be done there with proper test cases. Won't fully work with wrapping composite components though, as this is done incompatibly and opaquely in Mojarra and MyFaces. Refer to comments in AjaxBehaviorHandler.applyWrapped for more details.
Moved the listener invocation from AjaxBehavior.broadcast to AjaxBehaviorListenerImpl, and the MethodExpression creation from AjaxBehaviorHandler's MetaRuleset code to AjaxBehaviorHandler.addListenerToAjaxBehavior. New superclass doesn't provide MetaRuleset creation anymore. Now we don't need the MethodRule changes that were introduced in ICE-8180 / ICE-8223.
Added lazy evaluation of ValueExpressions for ace:ajax properties, which had previously been evaluated at construction time to their primitive values. Now state save the attached state for the ValueExpressions.
trunk
Subversion 29525
This is a fuller solution to
ICE-8180/ICE-8223, and uses lessons learned from them, as well as some of the code developed in them, although re-architected.Extend TagHandler instead of BehaviorHandler, which involves directly implementing code instead of delegating to opaque JSF impl class. Also adds the concept of having nested (f:ajax is child of another tag), and wrapped (f:ajax is the parent of other tags) scenarios. Can more directly setup the created AjaxBehavior instance. And there's a subtle difference of treating a composite component parent as potentially a ClientBehaviorHolder itself. Not sure if that was relevant though.
Investigated Mojarra and MyFaces techniques of having f:ajax work both in a nested, and wrapped scenarios. Found way of interoperating with Mojarra for all nested scenarios, but only some with MyFaces. More work could be done there with proper test cases. Won't fully work with wrapping composite components though, as this is done incompatibly and opaquely in Mojarra and MyFaces. Refer to comments in AjaxBehaviorHandler.applyWrapped for more details.
Moved the listener invocation from AjaxBehavior.broadcast to AjaxBehaviorListenerImpl, and the MethodExpression creation from AjaxBehaviorHandler's MetaRuleset code to AjaxBehaviorHandler.addListenerToAjaxBehavior. New superclass doesn't provide MetaRuleset creation anymore. Now we don't need the MethodRule changes that were introduced in
ICE-8180/ICE-8223.Added lazy evaluation of ValueExpressions for ace:ajax properties, which had previously been evaluated at construction time to their primitive values. Now state save the attached state for the ValueExpressions.
trunk
Subversion 29525