+1 for this.

i actually didn't know that it used the id attribute from the html if it was
defined.  Learn something new every day...

On 10/6/06, Igor Vaynberg <[EMAIL PROTECTED]> wrote:

ive been noticing more and more how rediculously long markup ids are
getting
in nontrivial pages. i mean a markupid of 50 characters? comon!

here is my take on optimizing the length and still keeping it reasonably
readeable. once we have support for figuring out if we are in prod or dev
mode we can optimize it even further by stripping component id.

should this go into 1.2? or wait for 1.3? or this idea sucks alltogether
and
should never see the light of svn?

-Igor


Index: D:/ws/wicket-1.x/src/java/wicket/Component.java
===================================================================
--- D:/ws/wicket-1.x/src/java/wicket/Component.java    (revision 7558)
+++ D:/ws/wicket-1.x/src/java/wicket/Component.java    (working copy)
@@ -915,26 +915,12 @@
      */
     public String getMarkupId()
     {
-        /*
-         * TODO Post 1.2: Restore the code below after the constructor
refactor,
-         * right now its causing too much pain for components inside
listviews
-         * and borders.
-         *
-         * CODE:
-         *
-         * String id = getMarkupAttributes().getString("id"); if (id ==
null) {
-         * id = getPageRelativePath(); } return id;
-         *
-         * JAVADOC:
-         *
-         * If the id attribute is present in the markup attributes of
this
-         * component it will be used, otherwise the page-relative path of
this
-         * component will be used. <p>
-         *
-         *
-         */
-
-        return getPageRelativePath().replace(':', '_');
+        String markupId=(String)getMetaData(MARKUP_ID_KEY);
+        if (markupId==null) {
+            markupId=getId()+getPage().nextUniqueValue();
+            setMetaData(MARKUP_ID_KEY, markupId);
+        }
+        return markupId;
     }

     /**
@@ -1665,6 +1651,13 @@
         // Call any tag handler
         onComponentTag(tag);

+        Iterator handlers =
getApplicationSettings().getComponentTagHandlers().iterator();
+        while (handlers.hasNext())
+        {
+            ((IComponentTagHandler)handlers.next()).onComponentTag(this,
tag);
+        }
+
+
         // If we're an openclose tag
         if (!tag.isOpenClose() && !tag.isOpen())
         {
@@ -3066,4 +3059,15 @@
     {
         setFlag(FLAG_HEAD_RENDERED, false);
     }
+
+
+    /**
+     * Metadata key used to store/retrieve markup id
+     */
+    private static MetaDataKey MARKUP_ID_KEY = new MetaDataKey(
String.class
)
+    {
+
+        private static final long serialVersionUID = 1L;
+
+    };
}
I
Index: D:/ws/wicket-1.x/src/java/wicket/Page.java
===================================================================
--- D:/ws/wicket-1.x/src/java/wicket/Page.java    (revision 7558)
+++ D:/ws/wicket-1.x/src/java/wicket/Page.java    (working copy)
@@ -183,6 +183,10 @@
     /** Version manager for this page */
     private IPageVersionManager versionManager;

+
+    /** Counter for generating unique values by calling # */
+    private int counter;
+
     /**
      * Constructor.
      */
@@ -240,6 +244,15 @@
         init(pageMap);
     }

+
+    /**
+     * @return unique integer value within the scope of the page
+     */
+    public final int nextUniqueValue()
+    {
+        return counter++;
+    }
+


Reply via email to