Ok.  I'll try to check what happens in 1.5.1 in this case, and then create a
ticket.

Thanks !

2011/10/19 Martin Grigorov <mgrigo...@apache.org>

> Hi,
>
> 2011/10/19 Yves-Marie LAINÉ <ymla...@gmail.com>:
> > Hi All,
> >
> > Yesterday, i wrote a Page that need to ajax replace a component, so with
> > outputMarkupId at true. This component has to know the markupId when
> > onInitialize is called (depending of a component used by it that create a
> > javascript)
> >
> > I know that when we replace Components, the markupId of the replaced
> > Component is set on the added one.
> >
> > But in order to make the added component work on that page, i had to
> wrote
> > code like this :
> >
> >
> >                             public void onClick(AjaxRequestTarget target)
> {
> >
> >                                UserDialogPanel userDialogPanel = new
> > UserDialogPanel("dialog", rowModel);
> >
> > *
> > userDialogPanel.setMarkupId(getPage().get("dialog").getMarkupId());*
>  //
> > This line of code could probably be avoided.
> >
> >
> > getPage().get("dialog").replaceWith(userDialogPanel);
> >                                target.addComponent(userDialogPanel);
> >
> >                                userDialogPanel.open(target);
> >                            }
> >
> > And after looking at the wicket code it seems to be normal  :
> >
> >    *public final MarkupContainer replace(final Component child)*
> >    {
> >        checkHierarchyChange(child);
> >
> >        if (child == null)
> >        {
> >            throw new IllegalArgumentException("argument child must be not
> > null");
> >        }
> >
> >        if (log.isDebugEnabled())
> >        {
> >            log.debug("Replacing " + child.getId() + " in " + this);
> >        }
> >
> >        if (child.getParent() != this)
> >        {
> >            // Add to map
> >            final Component replaced = put(child);
> >
> >            // Look up to make sure it was already in the map
> >            if (replaced == null)
> >            {
> >                throw new WicketRuntimeException(
> >                    exceptionMessage("Cannot replace a component which has
> > not been added: id='" +
> >                        child.getId() + "', component=" + child));
> >            }
> >
> >            // first remove the component.
> >            removedComponent(replaced);
> >
> > *            // then add the other one.
> >            addedComponent(child); // onInitialize is called in this
> method*
> >
> >            // The position of the associated markup remains the same
> >            child.markupIndex = replaced.markupIndex;
> >
> > *            // The generated markup id remains the same
> >            child.setMarkupIdImpl(replaced.getMarkupIdImpl()); // and
> then,
> > the markupid is replaced.*
> >        }
> >
> >        return this;
> >    }
> >
> >
> > So if wicket developpers read this, do you think it's possible to improve
> > this by modifying the sequence and setting the markupId before adding the
> > component ?
> Wicket developer here :-)
> Please create a ticket in our Jira to not forget about this request.
> But I'm not sure this improvement will go in 1.4.x. 1.4.x is in
> maintenance and receives only bug fixes. New features and improvements
> go in 1.5.x.
> > (Sorry for my english, i hope to be clear enough..)
> >
> > Regards,
> > Yves-Marie LAINÉ
> >
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
Yves-Marie LAINÉ

Reply via email to