You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ta...@jakarta.apache.org> on 2005/01/04 16:10:12 UTC
[jira] Commented: (TAPESTRY-243) Add getParent() method to IComponent
[ http://issues.apache.org/jira/browse/TAPESTRY-243?page=comments#action_57265 ]
Howard M. Lewis Ship commented on TAPESTRY-243:
-----------------------------------------------
Tapestry has an elegant way of dealing with these kind of things; the enclosing component will register itself using a well-known-name into the IRequestCycle, the enclosed components can locate the enclosing component this way.
The scheme you describe is very JSP-centric, and therefore very limited. Tapestry is far more dynamic than JSPs; this enclosed/enclosing relationship may not be determined until runtime (due to things like Block/RenderBlock, RenderBody, Delegator, etc.).
> Add getParent() method to IComponent
> ------------------------------------
>
> Key: TAPESTRY-243
> URL: http://issues.apache.org/jira/browse/TAPESTRY-243
> Project: Tapestry
> Type: Improvement
> Components: Framework
> Versions: 3.0.1
> Reporter: Naeem Malik
> 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
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org