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 2011/06/03 23:01:40 UTC
svn commit: r1131240 -
/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
Author: jdonnerstag
Date: Fri Jun 3 21:01:39 2011
New Revision: 1131240
URL: http://svn.apache.org/viewvc?rev=1131240&view=rev
Log:
applied patch provided: Allow filtering and grouping of resources in the <head>
Issue: WICKET-3728
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java?rev=1131240&r1=1131239&r2=1131240&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java Fri Jun 3 21:01:39 2011
@@ -120,6 +120,7 @@ public class HtmlHeaderContainer extends
try
{
+ // Create a (string) response for all headers contributed by any component on the Page.
final StringResponse response = new StringResponse();
getRequestCycle().setResponse(response);
@@ -129,51 +130,33 @@ public class HtmlHeaderContainer extends
getRequestCycle().setResponse(headerResponse.getResponse());
}
- // In any case, first render the header section directly associated
- // with the markup
+ // Render the header sections of all components on the page
+ AbstractHeaderRenderStrategy.get().renderHeader(this, getPage());
+
+ // Close the header response before rendering the header container itself
+ // See https://issues.apache.org/jira/browse/WICKET-3728
+ headerResponse.close();
+
+ // Create a separate (string) response for the header container itself
+ final StringResponse bodyResponse = new StringResponse();
+ getRequestCycle().setResponse(bodyResponse);
+
+ // render the header section directly associated with the markup
super.onComponentTagBody(markupStream, openTag);
- // Render all header sections of all components on the page
- AbstractHeaderRenderStrategy.get().renderHeader(this, getPage());
- getHeaderResponse().close();
+ // Cleanup extraneous CR and LF from the response
+ CharSequence output = getCleanResponse(response);
+ CharSequence bodyOutput = getCleanResponse(bodyResponse);
// Automatically add <head> if necessary
- CharSequence output = response.getBuffer();
- if (output.length() > 0)
- {
- if (output.charAt(0) == '\r')
- {
- for (int i = 2; i < output.length(); i += 2)
- {
- char ch = output.charAt(i);
- if (ch != '\r')
- {
- output = output.subSequence(i - 2, output.length());
- break;
- }
- }
- }
- else if (output.charAt(0) == '\n')
- {
- for (int i = 1; i < output.length(); i++)
- {
- char ch = output.charAt(i);
- if (ch != '\n')
- {
- output = output.subSequence(i - 1, output.length());
- break;
- }
- }
- }
- }
-
- if (output.length() > 0)
+ if ((output.length() > 0) || (bodyOutput.length() > 0))
{
if (renderOpenAndCloseTags())
{
webResponse.write("<head>");
}
+ webResponse.write(bodyOutput);
webResponse.write(output);
if (renderOpenAndCloseTags())
@@ -191,6 +174,44 @@ public class HtmlHeaderContainer extends
/**
*
+ * @param response
+ * @return Cleaned up response
+ */
+ private CharSequence getCleanResponse(final StringResponse response)
+ {
+ CharSequence output = response.getBuffer();
+ if (output.length() > 0)
+ {
+ if (output.charAt(0) == '\r')
+ {
+ for (int i = 2; i < output.length(); i += 2)
+ {
+ char ch = output.charAt(i);
+ if (ch != '\r')
+ {
+ output = output.subSequence(i - 2, output.length());
+ break;
+ }
+ }
+ }
+ else if (output.charAt(0) == '\n')
+ {
+ for (int i = 1; i < output.length(); i++)
+ {
+ char ch = output.charAt(i);
+ if (ch != '\n')
+ {
+ output = output.subSequence(i - 1, output.length());
+ break;
+ }
+ }
+ }
+ }
+ return output;
+ }
+
+ /**
+ *
* @return True if open and close tag are to be rendered.
*/
protected boolean renderOpenAndCloseTags()