Craig is absolutely right, of course, but if you want to be aware of what an id value is and OK to manage its uniqueness, setMarkupId() still applies. A use case for this is, for instance, a Selenium test: Selenium locates the HTML elements by ids and you have to know them at page-write time in order to be able to provide them to it.
Regards, Pierre On Tue, Apr 13, 2010 at 6:04 AM, <[email protected]> wrote: > Thanks a lot to you both for your solutions! > > Regards > > Bernard > > On Mon, 12 Apr 2010 23:36:16 -0400, you wrote: > > >Like Pierre said, component.setMarkupId(component.getId()) will work, but > it was discussed just a couple of weeks ago why that's a bad approach. The > thread isn't appearing on nabble though, not sure why that is. Anyway, a > safer approach (to prevent duplicate ID issues) is to generate your > javascript calls at the server using the markup ID as a parameter. It > sounds like you have a function like > > > >function func() { > > var elem = document.getElementById("someId"); > > // do stuff to the element > >} > > > >so just modify to > > > >function func(id) { > > var elem = document.getElementById(id); > > // do stuff to the element > >} > > > >and output a call to that function using something like a > StringHeaderContributor or implement IHeaderContributor if you need to call > at page load or use AjaxRequestTarget if in an ajax request. > > > >----- Original Message ----- > >From: Pierre Goupil > >[mailto:[email protected]] > >To: [email protected] > >Sent: Mon, 12 > >Apr 2010 18:36:55 -0400 > >Subject: Re: How to get stable DOM IDs without > >hacks? > > > > > >> Hello, > >> > >> You can use myComponent.setMarkupId("blah"), but then it's up to you to > >> ensure the id uniqueness. > >> > >> Regards, > >> > >> Pierre > >> > >> > >> On Tue, Apr 13, 2010 at 12:35 AM, <[email protected]> wrote: > >> > >> > Hi, > >> > > >> > Wicket has its own mind - it changes IDs in HTML forms so JavaScript > >> > breaks. > >> > > >> > Example: > >> > > >> > Source: > >> > <input type="button" wicket:id="addButton" id="addButton" > >> > value="Add"/> > >> > > >> > Generated: > >> > <input type="button" id="addButtona" value="Add" name="addButton"/> > >> > > >> > Please note that Wicket renames the id from "addButton" to > >> > "addButtona" while it does not change the name attribute value. > >> > > >> > So we would have to create a Button subclass and: > >> > > >> > @Override > >> > public String getMarkupId(){ > >> > // As an example, use the wicket:id value ... > >> > return getId(); > >> > } > >> > > >> > and in HTML, we have to write a warning as a reminder of this hack: > >> > <!-- Wicket overrides id from wicket:id value --> > >> > > >> > This is a maintenance problem and a performance problem because the > >> > additinal classes cost memory and CPU. > >> > > >> > Any ideas? > >> > > >> > Thanks, > >> > > >> > Bernard > >> > > >> > > >> > --------------------------------------------------------------------- > >> > To unsubscribe, e-mail: [email protected] > >> > For additional commands, e-mail: [email protected] > >> > > >> > > >> > >> > >> -- > >> Les deux règles universelles du bide : > >> > >> 1) on n'explique pas un bide > >> > >> 2) dans le futur, un bide sera toujours un bide. > >> > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [email protected] > >For additional commands, e-mail: [email protected] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- Les deux règles universelles du bide : 1) on n'explique pas un bide 2) dans le futur, un bide sera toujours un bide.
