Yep, you read that right. I just found out that if you explicitly define an id attribute on your component, getMarkupId still just returns a generated one. This suprises me; I'm pretty sure we always agreed that if an explicit id is provided in the markup, that should be used. See the date picker in wicket-examples/forminput for example: it doesn't work now because the id is set to "dateProperty" but getMarkupId, which is used by the date picker, returns "dateProperty1".
The fix is easy[1], but results in a failing unit test. Imho, that unit test is just too fragile, and I'm thinking about implementing a quick fix for it and submit this change. But I wanted to check here first in case I'm overlooking something. Eelco [1] Index: /Users/eelcohillenius/Documents/workspace_wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java =================================================================== --- /Users/eelcohillenius/Documents/workspace_wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java (revision 550266) +++ /Users/eelcohillenius/Documents/workspace_wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java (working copy) @@ -1181,10 +1181,13 @@ /** * Retrieves id by which this component is represented within the markup. + * This is either the id attribute if it is set explicitly in the markup, or + * a generated id. * <p> * The point of this function is to generate a unique id to make it easy to * locate this component in the generated markup for post-wicket processing - * such as javascript or an xslt transform. + * such as javascript or an xslt transform in case no explicit id was set + * yet. * <p> * Note: This method should only be called after the component or its parent * have been added to the page. @@ -1204,7 +1207,13 @@ + "to find the page it is supposed to operate in before you can call " + "this method (Component#getMarkupId)"); } - markupId = getId() + page.getAutoIndex(); + // try to read from markup + markupId = getMarkupAttributes().getString("id"); + if (markupId == null) + { + // if not in the markup, generate one + markupId = getId() + page.getAutoIndex(); + } setMetaData(MARKUP_ID_KEY, markupId); } return markupId;