Hi Guys,

I've been a silent user of Tapestry off and on since version 4.0 was late-alpha/early-beta. That doesn't sound long, but it's been long enough for me to learn a fair bit about the framework, and to be very impressed with it. The reason I got /into/ tapestry in the first place was actually more to do with Hivemind than Tapestry. I've been pushing a plug-in based approach for about 4 years; Howard thankfully saved me the effort of having to write a framework to actually /do/ it.

Now I'm in a position where I'm trying to do both. I'm in the middle of building a proof of concept for a green-field Tapestry app that needs to demonstrate the ability to make /extremely/ modular applications where - amongst other things - individual areas (components) on screens can be contributed by modules, dynamically, on the fly, depending on context. Yes, I'm clearly mad, but there are reasons I'm taking this to the extreme I am. Effectively, what I'm proposing is something very eclipse like: 'Perspectives' will be created, and views will be contributed to these perspectives from other modules. Furthermore, decorations and panels will then be contributed to these views to extend their behavior. All very Hivemind.

The complexity here is that effectively I want the ability to embed whole components, designed using standard tapestry semantics into each other. The reason for this is that within this particular application, embedding components in this manner is going to be the norm, not the exception, so building a whole new component framework around IRender is not the route I want to take if I can avoid it!

I've been trying to work out how to achieve this goal for a few days now, and I'm not seeing an easy way to achieve it, so wanted to ask the experts. What I've considered so far is: * Creating a component that (indirectly, via contributions and services that actually work out which component to create) calls the PageLoader.createImplicitComponent method. Unfortunately, this method adds the component to the 'containing' component permanently, the component can't change 'per request', which it will potentially have to. * Creating a entirely separate 'component loader' service that replicates the functionality that the pageloader has, but doesn't actually add the component to its container. The issue here is that it (a) it feels too complicated to be the 'right' way, and (b) I'm not clear if this totally breaks the tapestry architecture -- can a component /exist/ without a parent component? * Creating something that looks and works a lot like a component, but has a less static lifecycle. My concern here is that again, that sounds like a pretty major departure from where Tapestry is now, so I'm concerned that taking this tack might just make the solution un- maintainable.

I guess the fundamental issue here is that it appears that Tapestry is designed to load the entire page statically once, and then re-use it. There doesn't appear to be a provision for elements of that UI to be constructed 'on the fly', which seems a shame. There are already elements of the standard framework that 'feel' like they could benefit from this ability (the 'describe' framework, for a start), and I can see the potential increasing as more people get into Hivemind.

Has anyone else thought about this? Has anyone got any suggestions for ways to think about this that I'm missing?

Cheers,


Paul

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

Reply via email to