I have the same problem when I run my object model which (tapestry
components bind their values to) through external validation.
I validate the object model and have set of errors and if the errors are
inside a component that is in a loop its very hard to attach that error to
it.
To resolved this I had to  change the field trackings in the validation
delegate to get around the fact that I could not access looped component s
state in a listner method.

There is just a problem that things dont work the same way in loops as they
do in the rest of the page. Its a real "gotcha" and people should be made to
be aware of it when they use the framework.

Dont get me wrong I love tapestry. There are some really cool features, and
tapestry 4 blows everything else away like it. I chose it for the lastest
project at my work and other than the loop problem everything is great. I
have also written a sample application that I will realease for people to
see as an example of a tapestry 4 project pretty soon that includes
integration with ajax.





On 26/01/06, gaz jones <[EMAIL PROTECTED]> wrote:
>
> ivano: i think you slightly missunderstood my example, maybe it wasnt
> particularly clear. i would not be developing a componet to display a link
> that i would like to use in a page, i would be developing a component that
> inherits from AbstractComponent and needs to have links to other pages
> inside of it. now i would assume that i could use the components that have
> already been written to do this -> PageLink for example but i cannot
> because
> they cannot be instantiate directly in code. so i am forced to repeat
> functionality that PageLink provides within my own component. which leads
> me
> to think, this is not a true component based framework.
>
> imo that is a major disadvantage, as it prevents you from dynamically
> creating components that are made up of _other_ components when you
> inherit
> from AbstractComponet - that is a REAL pain. and something you can do
> easily
> in other component based frameworks.
>
> as for the rewind phase... its not a matter of not thinking about the page
> in terms of how the components are placed in the page, its about accessing
> looped components at rewind phase which is a very obvious thing to want to
> do that you just cant easily do it. clearly im wanting something that just
> isnt there at the moment - but what i want to do is not unreasonable, nor
> is
> it unusual... and i cant see why everyone else wouldnt want to do it
> too...
>
>
>
> On 1/26/06, Mark Stang <[EMAIL PROTECTED]> wrote:
> >
> > Ivano,
> > I think his complaint is that you can't configure a page dynamically at
> > run-time.  I know we have work-arounds, like RenderBlock and
> DynamicBlock
> > and such.  I think what he wants to do is dynamically re-configure and
> add
> > components at run-time as opposed to the .jwc/.html/.page.  If each of
> those
> > components was backed by an instance of a class he could create any
> > component and add/remove it to/from a page.  He may not understand that
> > Tapestry components are state-less, which means that besides creating
> > instances of a component, it would have to be "attached" to something
> > dynamically.
> >
> > Maybe he would be happier with portlets.
> >
> > regards,
> >
> > Mark
> >
> >
> > -----Original Message-----
> > From: Ivano [mailto:[EMAIL PROTECTED]
> > Sent: Thu 1/26/2006 7:24 AM
> > To: Tapestry users
> > Subject: Re: tapestry not really component based?
> >
> >
> >
> > gaz jones wrote:
> >
> > >thats not _quite_ what i want though, as its not truly dynamic - thats
> > >including a pre-defined component into the page, not generating a
> > completely
> > >dynamic one... if i have understood your suggestion, i would need to
> > define
> > >every component i ever might need in the jwc or using annotations...
> > >
> > >
> > >
> > From what get of your posts I can't understand what you mean  by "not
> > truly dynamic".
> > You suggest substituting:
> >
> > PageLink pageLink = new PageLink();
> > pageLink.page = "MyGreatPage";
> > getPage.addComponent(pageLink); // or something similar
> >
> > in the renderComponent.
> >
> > But this looks like an operation to *add* a component to the page, and
> > not to *render* it.
> > To add the component, you simply put it in the page template, in the
> > descriptor or through annotations.
> > And to me this way is better than adding through java code: it lets you
> > change the page composition without touching the compiled code.
> >
> > If you need to create a component to "include" another component than
> > you do it the same way. If you think that this means not being dynamic,
> > you better consider what you need for a component to be actually
> > *reusable*.
> > As I see it there are only in two cases:
> > 1. The component knows its exact internal composition to depend on
> > expected behaviour, or
> > 2. It should be totally independent of possible subcomponents.
> >
> > And this is what you get with tapestry.
> >
> > But maybe I misunderstood your question, and you should consider the
> > following.
> >
> > The renderComponent code:
> >
> > writer.begin("a");
> > ILink link = getPageService().getLink(true, "MyGreatPage");
> > writer.attribute("href", link.getURL());
> > writer.print("Go to my great page");
> > writer.end("a");
> >
> > is only written once by the component's developer and the "MyGreatPage"
> > is actually parameterized.
> >
> > As a user you only add the component to a page in the .jwc and use it in
> > the template, passing the destination page as a parameter.
> > And so you need not write any java code for the page or the component
> > you're using.
> > You only need to declare the components that you really make use of, in
> > the .jwc, and this is related to the considerations I previously made.
> >
> > As for the rewind, it's just a different perspective from what you
> > described, and I agree that it takes a little effort to get into. But
> > the component pooling is a useful mean to reduce the application from
> > burdening the system, cause you need not create as many resources,
> > reusing existing ones, and that's what pooling exists for.
> > The difference is that you don't have a "global" page structure that you
> > could navigate to find subcomponents. But this too can be an advantage
> > since you decouple yourself from thinking in terms of how the components
> > are placed within the page. This really helps when you change the page's
> > composition in any way, without being forced to change the listener's
> > code to adapt to the new page layout.
> > Moreover you don't need to actually manage the iteration code to examine
> > dynamic lists of components. The framework creates the loop variable and
> > iterates through the list for you.
> >
> > Ivano Pagano
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> >
>
>


--
d-_-b \m/(>_<)\m/ (9ò_ó)-o(@_o)

Reply via email to