Hi,

for the issue in the subject I think we should use an IAutoComponentFactory
for header sections to dequeue it inside
MarkupContainer#dequeueAutoComponents.
This change is quite small and involves just HtmlHeaderSectionHandler (see
the diff at he bottom). I've tested it with Wicket Examples (mostly with
AJAX example) and everything is ok, but I want to know if any of you is
concerned about it.

Here it is:



diff --git
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
index 0ea0002..5b79f80 100644
---
a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
+++
b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
@@ -18,11 +18,16 @@

 import java.text.ParseException;

+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.ComponentTag.IAutoComponentFactory;
 import org.apache.wicket.markup.Markup;
 import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
+import org.apache.wicket.markup.html.internal.HtmlHeaderItemsContainer;
 import org.apache.wicket.markup.parser.AbstractMarkupFilter;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
 import org.apache.wicket.markup.resolver.HtmlHeaderResolver;
@@ -72,6 +77,24 @@
     /** The Markup available so far for the resource */
     private final Markup markup;

+    private static final IAutoComponentFactory HTML_HEADER_FACTORY = new
IAutoComponentFactory()
+    {
+        @Override
+        public Component newComponent(MarkupContainer container,
ComponentTag tag)
+        {
+            return new HtmlHeaderContainer(tag.getId());
+        }
+    };
+
+    private static final IAutoComponentFactory HTML_HEADER_ITEMS_FACTORY =
new IAutoComponentFactory()
+    {
+        @Override
+        public Component newComponent(MarkupContainer container,
ComponentTag tag)
+        {
+            return new HtmlHeaderItemsContainer(tag.getId());
+        }
+    };
+
     /**
      * Construct.
      *
@@ -164,6 +187,7 @@
         tag.setId(HEADER_ID);
         tag.setAutoComponentTag(true);
         tag.setModified(true);
+        tag.setAutoComponentFactory(HTML_HEADER_ITEMS_FACTORY);
     }

     /**
@@ -188,6 +212,7 @@
                 tag.setId(HEADER_ID);
                 tag.setAutoComponentTag(true);
                 tag.setModified(true);
+                tag.setAutoComponentFactory(HTML_HEADER_FACTORY);
             }
         }
         else if (tag.isClose())
@@ -201,6 +226,7 @@
                 headOpenTag.setAutoComponentTag(false);
                 headOpenTag.setModified(false);
                 headOpenTag.setFlag(ComponentTag.RENDER_RAW, true);
+                headOpenTag.setAutoComponentFactory(null);
             }

             foundClosingHead = true;
@@ -217,6 +243,7 @@
         openTag.setId(HEADER_ID);
         openTag.setAutoComponentTag(true);
         openTag.setModified(true);
+        openTag.setAutoComponentFactory(HTML_HEADER_FACTORY);

         final ComponentTag closeTag = new ComponentTag(HEAD,
TagType.CLOSE);
         closeTag.setOpenTag(openTag);

Reply via email to