CLONE -Add getParent() method to IComponent
-------------------------------------------

         Key: TAPESTRY-891
         URL: http://issues.apache.org/jira/browse/TAPESTRY-891
     Project: Tapestry
        Type: Improvement
  Components: Framework  
    Versions: 3.0.1    
    Reporter: Sergey Manukyan
    Priority: Minor


Tapestry does not allow you to retrieve the parent of a component. If you have 
a component C nested in a component P, there is no method to retrieve the 
parent P from C. What is needed is a getParent() method.

There is no logical reason for not including a getParent method as methods 
exist to retrieve the children of a component. The getParent method is 
extremely useful if you wish to change the rendering behavior of a component 
based on whether it is nested inside a particular component. The JSP taglib API 
supports this with the TagSupport.findAncestorWithClass(Tag, Class) method. 
Without the getParent method, it is difficult to convert some JSP tags to 
Tapestry components.

Fortunately, this improvement is not difficult to implement. I have 
successfully implemented this by adding a private variable _parent of type 
IComponent to AbstractComponent and adding getParent/setParent methods to 
get/set the variable: the getter should look like this:

return _parent != null ? _parent : getContainer();

Finally, add the following line to 
BaseComponentTemplateLoader.process(OpenToken) method (line 268 under version 
3.0.1)

  component.setParent(_activeComponent);

(Note that Tapestry does allow you to retrieve the IComponent a particular 
component is embedded in via the IComponent.getContainer() call. This call will 
retrieve the component whose template C was defined in. This method does not 
address the issue.)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to