hi,

i have already posted a question about this regarding dynamic insertion of
content into the page, but i thought i would bring it up again because i
think not being able to do so violates the DRY principle (O_o).
for example, if i have a component inheriting from AbstractComponent and i
want to put a page link in the page, i have to (if i understand it
correctly):

add a reference to the engine service in the component:

@InjectObject("engine-service:page")
public abstract IEngineService getPageService();

then in renderComponent...

writer.begin("a");
ILink link = getPageService().getLink(true, "MyGreatPage");
writer.attribute("href", link.getURL());
writer.print("Go to my great page");
writer.end("a");

when what i SHOULD be able to do, if tapestry were truly a component based
framework is:

in renderComponent...

PageLink pageLink = new PageLink();
pageLink.page = "MyGreatPage";
getPage.addComonent(pageLink); // or something similar

otherwise i am repeating the effort of the original PageLink author am i
not? there may be a better way to do this that i dont know about though
obviously...

not creating a proper hierarchy of components is also causing other
problems, such as processing components when in loops. you cant get at
specific instances of components in the rewind cycle because they all share
the same pooled component - is that correct?

do the authors of the framework have any comments on these points above or
any indication if this will change in the future? you can do both of these
things in other component based web frameworks, and i would see it as a
benefit if you could also do so in tapestry. does anyone else agree?

cheers
gaz

Reply via email to