You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2007/12/01 10:22:52 UTC

svn commit: r600063 - /wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java

Author: jdonnerstag
Date: Sat Dec  1 01:22:51 2007
New Revision: 600063

URL: http://svn.apache.org/viewvc?rev=600063&view=rev
Log:
fixed wicket-1105: Missing javascript header referencies when there are no body or head tags.

Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java?rev=600063&r1=600062&r2=600063&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java Sat Dec  1 01:22:51 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html;
 
+import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.IPageMap;
 import org.apache.wicket.IRequestTarget;
@@ -26,6 +27,7 @@
 import org.apache.wicket.Response;
 import org.apache.wicket.Session;
 import org.apache.wicket.behavior.AbstractBehavior;
+import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
 import org.apache.wicket.model.IModel;
@@ -35,6 +37,7 @@
 import org.apache.wicket.protocol.http.request.urlcompressing.UrlCompressor;
 import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
 import org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget;
+import org.apache.wicket.response.StringResponse;
 import org.apache.wicket.util.lang.Objects;
 import org.apache.wicket.util.string.JavascriptUtils;
 import org.slf4j.Logger;
@@ -112,8 +115,7 @@
 
 			Session session = Session.get();
 
-			Session.PageMapAccessMetaData meta = (Session.PageMapAccessMetaData)session
-				.getMetaData(Session.PAGEMAP_ACCESS_MDK);
+			Session.PageMapAccessMetaData meta = (Session.PageMapAccessMetaData)session.getMetaData(Session.PAGEMAP_ACCESS_MDK);
 			if (meta == null)
 			{
 				meta = new Session.PageMapAccessMetaData();
@@ -125,8 +127,7 @@
 			{
 				// this is the first access to the pagemap, set window.name
 				JavascriptUtils.writeOpenTag(response);
-				response
-					.write("if (window.name=='' || window.name.indexOf('wicket') > -1) { window.name=\"");
+				response.write("if (window.name=='' || window.name.indexOf('wicket') > -1) { window.name=\"");
 				response.write("wicket-" + name);
 				response.write("\"; }");
 				JavascriptUtils.writeCloseTag(response);
@@ -142,8 +143,8 @@
 				{
 					IBookmarkablePageRequestTarget current = (IBookmarkablePageRequestTarget)target;
 					BookmarkablePageRequestTarget redirect = new BookmarkablePageRequestTarget(
-						session.createAutoPageMapName(), current.getPageClass(), current
-							.getPageParameters());
+						session.createAutoPageMapName(), current.getPageClass(),
+						current.getPageParameters());
 					url = cycle.urlFor(redirect);
 				}
 				else
@@ -151,19 +152,17 @@
 					url = webPage.urlFor(INewBrowserWindowListener.INTERFACE);
 				}
 				JavascriptUtils.writeOpenTag(response);
-				response
-					.write("if (window.name=='' || (window.name.indexOf('wicket') > -1 && window.name!='" +
-						"wicket-" + name + "')) { window.location=\"");
+				response.write("if (window.name=='' || (window.name.indexOf('wicket') > -1 && window.name!='" +
+					"wicket-" + name + "')) { window.location=\"");
 				response.write(url);
-				response
-					.write("\" + (window.location.hash != null ? window.location.hash : \"\"); }");
+				response.write("\" + (window.location.hash != null ? window.location.hash : \"\"); }");
 				JavascriptUtils.writeCloseTag(response);
 			}
 		}
 	}
 
 	/** log. */
-	private static final Logger _log = LoggerFactory.getLogger(WebPage.class);
+	private static final Logger log = LoggerFactory.getLogger(WebPage.class);
 
 	/** The resource references used for new window/tab support */
 	private static ResourceReference cookiesResource = new ResourceReference(WebPage.class,
@@ -310,7 +309,7 @@
 		}
 		catch (Exception e)
 		{
-			_log.error("Page " + clonedPage + " couldn't be cloned to move to another pagemap", e);
+			log.error("Page " + clonedPage + " couldn't be cloned to move to another pagemap", e);
 		}
 		final IPageMap map = getSession().createAutoPageMap();
 		clonedPage.moveToPageMap(map);
@@ -397,11 +396,61 @@
 		// is != iter.remove(). And the iterator is not available
 		// inside onEndRequest(). Obviously WebPage.onEndRequest()
 		// is invoked outside the iterator loop.
-		final Component header = get(HtmlHeaderSectionHandler.HEADER_ID);
+		HtmlHeaderContainer header = (HtmlHeaderContainer)get(HtmlHeaderSectionHandler.HEADER_ID);
 		if (header != null)
 		{
 			this.remove(header);
 		}
+		else if (getApplication().getConfigurationType() == Application.DEVELOPMENT)
+		{
+			// the markup must at least contain a <body> tag for wicket to automatically
+			// create a HtmlHeaderContainer. Log an error if no header container
+			// was created but any of the components or behavior want to contribute
+			// something to the header.
+			header = new HtmlHeaderContainer(HtmlHeaderSectionHandler.HEADER_ID);
+			add(header);
+
+			Response orgResponse = getRequestCycle().getResponse();
+			try
+			{
+				final StringResponse response = new StringResponse();
+				getRequestCycle().setResponse(response);
+
+				// Render all header sections of all components on the page
+				renderHead(header);
+
+				// Make sure all Components interested in contributing to the header
+				// and there attached behaviors are asked.
+				final HtmlHeaderContainer finalHeader = header;
+				visitChildren(new IVisitor()
+				{
+					/**
+					 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
+					 */
+					public Object component(Component component)
+					{
+						component.renderHead(finalHeader);
+						return CONTINUE_TRAVERSAL;
+					}
+				});
+				response.close();
+
+				if (response.getBuffer().length() > 0)
+				{
+					log.error("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
+					log.error("You probably forgot to add a <body> tag to your markup since no Header Container was \n" +
+						"found but components where found which want to write to the <head> section.\n" +
+						response.getBuffer());
+					log.error("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
+				}
+			}
+			finally
+			{
+				this.remove(header);
+				getRequestCycle().setResponse(orgResponse);
+			}
+		}
+
 		super.onDetach();
 	}
 }