tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexander Gavrilov (Issue Comment Edited) (JIRA)" <j...@apache.org>
Subject [jira] [Issue Comment Edited] (TAP5-1284) When using @PageActivationContext and override a no-args activate event handler of parent page, the handler called too soon
Date Thu, 20 Oct 2011 17:50:11 GMT

    [ https://issues.apache.org/jira/browse/TAP5-1284?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13131831#comment-13131831
] 

Alexander Gavrilov edited comment on TAP5-1284 at 10/20/11 5:49 PM:
--------------------------------------------------------------------

Why old? Did Java deprecate inheritance? I don't think so. If we have 500 pages that require
access to the same data, why can't i create fields with accessor for this data in the base
class and just use them in child pages? I think we  should concentrate on fixing framework
behavior instead of declare common practices as deprecated. Maybe this issues is to hard to
fix?          
                
      was (Author: lucker):
    Why old? Did Java deprecate inheritance? I don't think so. If we have 500 pages that requires
access to the same data, why can't i create fields with accessor for this data in the base
class and just use them in child pages? I think we  should concentrate on fixing framework
behavior instead of declare common practices as deprecated. Maybe this issues is to hard to
fix?          
                  
> When using @PageActivationContext and override a no-args activate event handler of parent
page, the handler called too soon
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: TAP5-1284
>                 URL: https://issues.apache.org/jira/browse/TAP5-1284
>             Project: Tapestry 5
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.2.0
>            Reporter: Alexander Gavrilov
>            Assignee: Howard M. Lewis Ship
>            Priority: Critical
>
> It appears that the overrided onActivate() method is called before the @PageActivationContext
logic, which means the following can fail:
> public class BasePage { 
>     private MyEntity entity; 
>       
>     protected void setEntity(MyEntity entity) { 
>          this.entity = entity; 
>     } 
>        
>     protected void onActivate() { 
>         if (entity == null) throw new RuntimeException("Entity not found."); 
>     } 
> } 
> public class ConcreteClass { 
>     @PageActivationContext 
>     private MyEntity entity; 
>     protected void onActivate() { 
>         setEntity(entity); 
>         super.onActivate(); 
>     } 
> } 
> Workaround is do not use methods overriding. 
> The problem is the consecuence of Howard's approach:  "if the child class *overrides*
a method of the parent, then the overridden method will be invoked only by the parent class".
When Tapestry performs transformation it skips OnEventWorker advice, which invoke event handler
method of subclass and add it only for parent class. And required for @PageActivationContext
chain of invocation breaks. My approach is that if some class override some event handler
method of some class then Tapestry should stop advaicing parent class method invocation and
should rely on subclass method definition and is the subclass implementor responibility to
invoke parent class method.   

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message