Re: Ajax and isTransparentResolver

2008-04-11 Thread Igor Vaynberg
i dont think we can support transparent resolvers as ajax targets

-igor


On Fri, Apr 11, 2008 at 10:00 AM, Meetesh Karia [EMAIL PROTECTED] wrote:
 Hi all,

  We're seeing an issue with ajax and isTransparentResolver set to return
 true and I'm wondering if this is something we're doing wrong or if it's an
 oversight.  Here's an example:

  add(new WebMarkupContainer(toUpdate) {
@Override
public boolean isTransparentResolver() {
return true;
}
  });

  add(new WebMarkupContainer(myChild));

  with html like this:

  div wicket:id=toUpdate
div wicket:id=myChild
...
/div
  /div

  When a user clicks on an ajax link (which is a child of toUpdate and
 added in the same manner as myChild), toUpdate is added to the target to be
 rendered.

  Now, because toUpdate doesn't have any real children, it doesn't mark any
 of them as rendering in MarkupContainer.internalMarkRendering().  However,
 Component.render(MarkupStream) does mark all of the children as rendering
 because it calls markRendering() itself.  When the rendering is finished,
 MarkupContainer.onAfterRenderChildren() is called but only the toUpdate
 container has it's rendering flag set to false and the child rendering flags
 remain set to true.  If there's now another ajax click within that same
 container which modifies the visibility of a component, an exception will be
 thrown indicating that a hierarchy change can't occur while rendering.

  Are we using isTransparentResolver() incorrectly?

  Thanks,
  Meetesh


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



Re: Ajax and isTransparentResolver

2008-04-11 Thread Meetesh Karia

Thanks for the information ... I'll change our code.

Meetesh

Igor Vaynberg wrote:

i dont think we can support transparent resolvers as ajax targets

-igor


On Fri, Apr 11, 2008 at 10:00 AM, Meetesh Karia [EMAIL PROTECTED] wrote:
  

Hi all,

 We're seeing an issue with ajax and isTransparentResolver set to return
true and I'm wondering if this is something we're doing wrong or if it's an
oversight.  Here's an example:

 add(new WebMarkupContainer(toUpdate) {
   @Override
   public boolean isTransparentResolver() {
   return true;
   }
 });

 add(new WebMarkupContainer(myChild));

 with html like this:

 div wicket:id=toUpdate
   div wicket:id=myChild
   ...
   /div
 /div

 When a user clicks on an ajax link (which is a child of toUpdate and
added in the same manner as myChild), toUpdate is added to the target to be
rendered.

 Now, because toUpdate doesn't have any real children, it doesn't mark any
of them as rendering in MarkupContainer.internalMarkRendering().  However,
Component.render(MarkupStream) does mark all of the children as rendering
because it calls markRendering() itself.  When the rendering is finished,
MarkupContainer.onAfterRenderChildren() is called but only the toUpdate
container has it's rendering flag set to false and the child rendering flags
remain set to true.  If there's now another ajax click within that same
container which modifies the visibility of a component, an exception will be
thrown indicating that a hierarchy change can't occur while rendering.

 Are we using isTransparentResolver() incorrectly?

 Thanks,
 Meetesh