You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by do...@apache.org on 2004/11/05 00:03:37 UTC

svn commit: rev 56627 - in incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags: . html rendering

Author: dolander
Date: Thu Nov  4 15:03:35 2004
New Revision: 56627

Modified:
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IScriptReporter.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Span.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractRenderAppender.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/WriteRenderAppender.java
Log:
Moving the API to begin using the AbstractRenderAppender instead of StringBuilder.
Partial checkin




Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/HtmlUtils.java	Thu Nov  4 15:03:35 2004
@@ -19,6 +19,7 @@
 
 import org.apache.beehive.netui.util.config.ConfigUtil;
 import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument;
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 
 import javax.servlet.jsp.JspException;
 import java.io.UnsupportedEncodingException;
@@ -37,11 +38,10 @@
      * with HTML entities.  This method calls the overloaded method with <code>markupHTMLSpaceReturn</code>
      * set to <code>false</code>.
      * @param value The <code>String</code> value to be filtered and returned.
-     * @return a new <code>String</code> value containing HTML entities
      */
-    public static String filter(String value)
+    public static void filter(String value, AbstractRenderAppender results)
     {
-        return filter(value, false);
+        filter(value, results, false);
     }
 
     /**
@@ -51,13 +51,12 @@
      * @param value                 The <code>String</code> value to be filtered and returned.
      * @param markupHTMLSpaceReturn convert space characters and return characters
      *                              to &amp;nbsp; and &lt;br /&gt; marketup for html.
-     * @return a new <code>String</code> value containing HTML entities
      */
-    public static String filter(String value, boolean markupHTMLSpaceReturn)
+    public static void filter(String value, AbstractRenderAppender result, boolean markupHTMLSpaceReturn)
     {
         // if the value is null, return
         if (value == null)
-            return null;
+            return;
 
         // convert the string
         boolean needsToChange = false;
@@ -65,8 +64,8 @@
         char c;
         char prev = 0;
 
-        StringBuilder result = new
-                StringBuilder(numChars + (numChars / 5));
+        //StringBuilder result = new
+        //        StringBuilder(numChars + (numChars / 5));
 
         for (int i = 0; i < numChars; i++) {
             c = value.charAt(i);
@@ -116,7 +115,6 @@
             }
             prev = c;
         }
-        return (needsToChange ? result.toString() : value);
     }
 
     public static String escapeEscapes(String val)

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IScriptReporter.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IScriptReporter.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/IScriptReporter.java	Thu Nov  4 15:03:35 2004
@@ -17,6 +17,8 @@
  */
 package org.apache.beehive.netui.tags;
 
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+
 import javax.servlet.jsp.PageContext;
 
 /**
@@ -72,14 +74,13 @@
      * This method will output all of the Script associated with the script reporter.
      * @param sb The script is written into the provided StringBuilder. This value must not be null.
      */
-    void writeScript(StringBuilder sb);
-    void writeScript(PageContext pc);
+    void writeScript(AbstractRenderAppender sb);
 
     /**
      * This method will output all of the Script that appears inside the <head> tag.
      * @param sb The script is written into the provided StringBuilder. This value must not be null.
      */
-    void writeInitScript(StringBuilder sb);
+    void writeInitScript(AbstractRenderAppender sb);
 
     /**
      * This method indicates that the <code>writeScript</code> method has been called.

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Anchor.java	Thu Nov  4 15:03:35 2004
@@ -23,10 +23,7 @@
 import org.apache.beehive.netui.pageflow.util.URLRewriterService;
 import org.apache.beehive.netui.tags.HtmlUtils;
 import org.apache.beehive.netui.tags.IScriptReporter;
-import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
-import org.apache.beehive.netui.tags.rendering.AnchorTag;
-import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
-import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
+import org.apache.beehive.netui.tags.rendering.*;
 import org.apache.beehive.netui.util.Bundle;
 import org.apache.beehive.netui.util.FileUtils;
 import org.apache.beehive.netui.util.ParamHelper;
@@ -515,13 +512,14 @@
             return reportAndExit(EVAL_PAGE);
 
         // build the anchor into the results
-        //StringBuilder results = new StringBuilder(32 + ((_text != null) ? _text.length() : 0));
         StringBuilder script = new StringBuilder(32);
+        StringBuilderRenderAppender scriptWriter = new StringBuilderRenderAppender(script);
 
+        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
         TagRenderingBase trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, request);
 
-        if (!createAnchorBeginTag(request, script, trb)) {
+        if (!createAnchorBeginTag(request, scriptWriter, trb, writer)) {
             if (script.length() > 0)
                 ResponseUtils.write(pageContext, script.toString());
             return reportAndExit(EVAL_PAGE);
@@ -531,7 +529,6 @@
             write(_text);
 
         assert(trb != null) : "trb is null";
-        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         trb.doEndTag(writer);
 
         if (script.length() > 0)
@@ -550,8 +547,8 @@
      * @return a boolean value indicating if an error occur creating the anchor.
      * @throws JspException
      */
-    protected final boolean createAnchorBeginTag(HttpServletRequest request, StringBuilder script,
-                                                 TagRenderingBase trb)
+    protected final boolean createAnchorBeginTag(HttpServletRequest request, AbstractRenderAppender script,
+                                                 TagRenderingBase trb, AbstractRenderAppender writer)
             throws JspException
     {
         int have = 0;
@@ -727,14 +724,11 @@
         if (hasErrors())
             return false;
 
-        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         trb.doStartTag(writer, _state);
 
         //Emit javascript if this anchor needs to sumbit the form
         if (_formSubmit && formAction != null) {
-            String s = jsu.writeAnchorFormSubmit(getScriptReporter());
-            if (s != null)
-                script.append(s);
+            jsu.writeAnchorFormSubmit(getScriptReporter(),script);
         }
         if (idScript != null)
             script.append(idScript);

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Base.java	Thu Nov  4 15:03:35 2004
@@ -137,10 +137,13 @@
         buf.append(request.getScheme());
         buf.append("://");
         buf.append(request.getServerName());
-        if ("http".equals(request.getScheme()) && (80 == request.getServerPort())) {
+
+        String scheme = request.getScheme();
+        int port = request.getServerPort();
+        if ("http".equals(scheme) && (80 == port)) {
             //Do nothing
         }
-        else if ("https".equals(request.getScheme()) && (443 == request.getServerPort())) {
+        else if ("https".equals(scheme) && (443 == port)) {
             //Do nothing
         }
         else {
@@ -149,9 +152,6 @@
         }
         buf.append(request.getRequestURI());
         _state.href = buf.toString();
-
-        // we've set the HREF so reuse the string buffer
-        buf.setLength(0);
 
         // render the tag.
         WriteRenderAppender writer = new WriteRenderAppender(pageContext);

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Body.java	Thu Nov  4 15:03:35 2004
@@ -200,9 +200,7 @@
      */
     public int doEndTag() throws JspException
     {
-        //StringBuilder results = new StringBuilder(64);
-
-        // render the header...
+        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
 
         // if there were errors lets report them.
         if (hasErrors()) {
@@ -221,13 +219,11 @@
 
             // write out the script before the end tag.
             if (sr.isInitScriptWritten()) {
-                sr.writeScript(pageContext);
+                sr.writeScript(writer);
             }
         }
 
-        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         _br.doEndTag(writer);
-        //write(results.toString());
 
         // Evaluate the remainder of this page
         localRelease();

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java	Thu Nov  4 15:03:35 2004
@@ -806,19 +806,14 @@
             String focusName = (String) _focusMap.get(_focus);
 
             if (focusName != null) {
-
                 String formName = (_beanName != null) ? _beanName : _formId;
-                String s = JavaScriptUtils.getFocusScript(formName, focusName);
-                if (s != null)
-                    write(s);
+                JavaScriptUtils.getFocusScript(formName, focusName, writer);
             }
         }
 
         if (_formSubmit) {
             JavaScriptUtils jsu = getJavaScriptUtils(request);
-            String s = jsu.writeAnchorFormSubmit(getScriptReporter());
-            if (s != null)
-                write(s);
+            jsu.writeAnchorFormSubmit(getScriptReporter(),writer);
         }
 
         // output any generated javascript

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Hidden.java	Thu Nov  4 15:03:35 2004
@@ -18,10 +18,7 @@
 package org.apache.beehive.netui.tags.html;
 
 import org.apache.beehive.netui.tags.HtmlUtils;
-import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
-import org.apache.beehive.netui.tags.rendering.InputHiddenTag;
-import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
-import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
+import org.apache.beehive.netui.tags.rendering.*;
 import org.apache.beehive.netui.util.Bundle;
 
 import javax.servlet.ServletRequest;
@@ -169,8 +166,12 @@
             _state.name = name;
         }
 
-        if (_value != null)
-            _state.value = HtmlUtils.filter(_value);
+        if (_value != null) {
+            StringBuilder sb = new StringBuilder(_value.length() + 16);
+            StringBuilderRenderAppender sbAppend = new StringBuilderRenderAppender(sb);
+            HtmlUtils.filter(_value,sbAppend);
+            _state.value = sb.toString();
+        }
 
         // correct for null text here
         if (_state.value == null)

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Html.java	Thu Nov  4 15:03:35 2004
@@ -244,8 +244,6 @@
         // String script = writeScriptBlock();
         // ResponseUtils.write(pageContext, script);
 
-        //StringBuilder sb = new StringBuilder(32);
-
         if (!isInitScriptWritten()) {
             String s = Bundle.getString("Tags_ClientReqScriptHeader", null);
             registerTagError(s, null);
@@ -261,13 +259,13 @@
 
         // the script can be written out by another tag,  typically this would be the <body> tag.
         // If it hasn't been written out, then we will right it out now.
+        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         if (!isScriptWritten() && isInitScriptWritten()) {
-            writeScript(pageContext);
+            writeScript(writer);
         }
 
         // close the html tag
         write("\n");
-        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         _br.doEndTag(writer);
         localRelease();
         return EVAL_PAGE;

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/HtmlBaseTag.java	Thu Nov  4 15:03:35 2004
@@ -22,6 +22,7 @@
 import org.apache.beehive.netui.tags.IHtmlAttrs;
 import org.apache.beehive.netui.tags.IHtmlIdWriter;
 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
+import org.apache.beehive.netui.tags.rendering.StringBuilderRenderAppender;
 import org.apache.beehive.netui.util.Bundle;
 
 import javax.servlet.ServletContext;
@@ -567,7 +568,10 @@
         // without a scripRepoter we need to create the actual
         // JavaScript that will be written out
         JavaScriptUtils jsu = getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
-        return jsu.getTagIdMapping(tagId, value);
+        StringBuilder sb = new StringBuilder(32);
+        StringBuilderRenderAppender writer = new StringBuilderRenderAppender(sb);
+        jsu.getTagIdMapping(tagId, value, writer);
+        return sb.toString();
     }
 
     /**

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageAnchor.java	Thu Nov  4 15:03:35 2004
@@ -19,10 +19,7 @@
 
 import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
 import org.apache.beehive.netui.tags.IHtmlAccessable;
-import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
-import org.apache.beehive.netui.tags.rendering.ImageTag;
-import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
-import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
+import org.apache.beehive.netui.tags.rendering.*;
 import org.apache.beehive.netui.util.Bundle;
 
 import javax.servlet.http.HttpServletRequest;
@@ -391,10 +388,9 @@
     {
         if (_rolloverImage != null && getJavaScriptAttribute(ONMOUSEOVER) == null) {
             // cause the roll over script to be inserted
+            WriteRenderAppender writer = new WriteRenderAppender(pageContext);
             JavaScriptUtils jsu = getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
-            String s = jsu.writeRollover(getScriptReporter());
-            if (s != null)
-                write(s);
+            jsu.writeRollover(getScriptReporter(),writer);
         }
 
         return EVAL_BODY_BUFFERED;
@@ -416,13 +412,13 @@
         HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
 
         // build the anchor into the results
-        //StringBuilder results = new StringBuilder(128);
         StringBuilder script = new StringBuilder(128);
+        StringBuilderRenderAppender scriptWriter = new StringBuilderRenderAppender(script);
 
         // render the anchor tag
         WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         TagRenderingBase trb = TagRenderingBase.Factory.getRendering(TagRenderingBase.ANCHOR_TAG, req);
-        if (!createAnchorBeginTag(req, script, trb)) {
+        if (!createAnchorBeginTag(req, scriptWriter, trb, writer)) {
             reportErrors();
             if (script.length() > 0)
                 write(script.toString());

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ImageButton.java	Thu Nov  4 15:03:35 2004
@@ -261,9 +261,8 @@
         if (_rolloverImage != null && getJavaScriptAttribute(ONMOUSEOVER) == null) {
             // cause the roll over script to be inserted
             JavaScriptUtils jsu = getJavaScriptUtils((HttpServletRequest) pageContext.getRequest());
-            String s = jsu.writeRollover(getScriptReporter());
-            if (s != null)
-                write(s);
+            WriteRenderAppender writer = new WriteRenderAppender(pageContext);
+            jsu.writeRollover(getScriptReporter(),writer);
         }
 
         return EVAL_BODY_BUFFERED;

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/JavaScriptUtils.java	Thu Nov  4 15:03:35 2004
@@ -18,6 +18,7 @@
 package org.apache.beehive.netui.tags.html;
 
 import org.apache.beehive.netui.tags.IScriptReporter;
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 
 import java.io.Serializable;
 import java.text.MessageFormat;
@@ -36,11 +37,11 @@
     private boolean _writeLookupMethods = false;
     private static ResourceBundle _bundle;
 
-    public String writeAnchorFormSubmit(IScriptReporter scriptReporter)
+    public void writeAnchorFormSubmit(IScriptReporter scriptReporter, AbstractRenderAppender results)
     {
         // check to see if we have already written out the form submit
         if (_anchorFormSubmit)
-            return null;
+            return;
 
         _anchorFormSubmit = true;
 
@@ -52,12 +53,10 @@
         // script block into it.
         if (scriptReporter != null) {
             scriptReporter.addScriptFunction(s);
-            return null;
+            return;
         }
 
-        StringBuilder sb = new StringBuilder(64);
-        writeScriptBlock(sb, s);
-        return sb.toString();
+        writeScriptBlock(results, s);
     }
 
     /**
@@ -76,52 +75,48 @@
     /**
      * this will write out the form focus script block
      */
-    public static String getFocusScript(String formName, String fieldName)
+    public static void getFocusScript(String formName, String fieldName,AbstractRenderAppender results)
     {
         assert (formName != null);
         assert (fieldName != null);
 
         // @TODO: Need to escaping
         String s = getString("setFocus", new Object[]{formName, fieldName});
-        StringBuilder sb = new StringBuilder(192);
-        writeScriptBlock(sb, s);
-        return sb.toString();
+        writeScriptBlock(results, s);
     }
 
     /**
      * This method will write out a tagId map entry for when there
      * isn't a ScriptContainer defined.
      */
-    public String getTagIdMapping(String tagId, String value)
+    public void getTagIdMapping(String tagId, String value,AbstractRenderAppender results)
     {
         String s = getString("singleIdMappingTable", new Object[]{
             tagId, value});
         String meths = writeNetuiNameFunctions(null);
         if (meths != null)
             s += meths;
-        StringBuilder sb = new StringBuilder(256);
-        writeScriptBlock(sb, s);
-        return sb.toString();
+        writeScriptBlock(results, s);
     }
 
     /**
      *
      */
-    public String writeRollover(IScriptReporter scriptReporter)
+    public void writeRollover(IScriptReporter scriptReporter,AbstractRenderAppender results)
     {
         if (_rollover)
-            return null;
+            return;
         _rollover = true;
 
         String s = getString("rollover", null);
         if (scriptReporter != null) {
             scriptReporter.addScriptFunction(s);
-            return null;
+            return;
         }
 
-        StringBuilder sb = new StringBuilder(256);
-        writeScriptBlock(sb, s);
-        return sb.toString();
+        //StringBuilder sb = new StringBuilder(256);
+        writeScriptBlock(results, s);
+        return;
     }
 
     public String writeIdMap(IScriptReporter scriptRepoter, String entries)
@@ -171,13 +166,22 @@
      *                tag written into
      * @param script  the JavaScript block
      */
-    public static void writeScriptBlock(StringBuilder results, String script)
+    public static void writeScriptBlock(AbstractRenderAppender results, String script)
     {
         assert(results != null);
+        writeScriptStart(results);
+        results.append(script);
+        writeScriptEnd(results);
+    }
 
+    public static void writeScriptStart(AbstractRenderAppender results)
+    {
         results.append("\n\n<script language=\"JavaScript\" type=\"text/JavaScript\">\n");
         results.append("<!--\n");
-        results.append(script);
+    }
+
+    public static void writeScriptEnd(AbstractRenderAppender results)
+    {
         results.append("-->\n");
         results.append("</script>\n\n");
     }

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Label.java	Thu Nov  4 15:03:35 2004
@@ -138,7 +138,7 @@
             labelValue = formatText(labelValue);
 
         if (!bypassEscape)
-            write(filter(labelValue, _escapeWhiteSpace));
+            filter(labelValue, writer, _escapeWhiteSpace);
         else
             write(labelValue);
         br.doEndTag(writer);

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/LabelBase.java	Thu Nov  4 15:03:35 2004
@@ -18,6 +18,7 @@
 package org.apache.beehive.netui.tags.html;
 
 import org.apache.beehive.netui.tags.HtmlUtils;
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
 
 import javax.servlet.jsp.JspException;
 import java.util.ArrayList;
@@ -109,12 +110,14 @@
      * @param markupHTMLSpaceReturn convert space characters and return characters
      *                              to &amp;nbsp; and &lt;br /&gt; marketup for html.
      */
-    protected String filter(String value, boolean markupHTMLSpaceReturn)
+    protected void filter(String value, AbstractRenderAppender writer, boolean markupHTMLSpaceReturn)
     {
-        if (value.equals(" "))
-            return "&nbsp;";
+        if (value.equals(" ")) {
+            writer.append("&nbsp;");
+            return;
+        }
 
-        return HtmlUtils.filter(value, markupHTMLSpaceReturn);
+        HtmlUtils.filter(value, writer, markupHTMLSpaceReturn);
     }
 
     /**

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptContainer.java	Thu Nov  4 15:03:35 2004
@@ -19,6 +19,8 @@
 
 import org.apache.beehive.netui.tags.AbstractClassicTag;
 import org.apache.beehive.netui.tags.IScriptReporter;
+import org.apache.beehive.netui.tags.rendering.AbstractRenderAppender;
+import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.jsp.JspException;
@@ -173,7 +175,7 @@
      * This method will output all of the Script associated with the script reporter.
      * @param sb The script is written into the provided StringBuilder. This value must not be null.
      */
-    public void writeScript(StringBuilder sb)
+    public void writeScript(AbstractRenderAppender sb)
     {
         assert(sb != null) : "The paramter 'sb' must not be null;";
 
@@ -181,21 +183,7 @@
             addInitCode();
             addAnchorRewriters();
         }
-        String script = writeScriptBlock();
-        sb.append(script);
-        _writeScript = true;
-    }
-
-    public void writeScript(PageContext pc)
-    {
-        assert(pc != null) : "The paramter 'sb' must not be null;";
-
-        if (isRunAtClient()) {
-            addInitCode();
-            addAnchorRewriters();
-        }
-        String script = writeScriptBlock();
-        write(script);
+        writeScriptBlock(sb);
         _writeScript = true;
     }
 
@@ -203,7 +191,7 @@
      * This method will output all of the Script that appears inside the <head> tag.
      * @param sb The script is written into the provided StringBuilder. This value must not be null.
      */
-    public void writeInitScript(StringBuilder sb)
+    public void writeInitScript(AbstractRenderAppender sb)
     {
         defineNetUIScope(sb);
         _writeInitScript = true;
@@ -278,16 +266,14 @@
     {
         // if there is a scopeId, then we need to create a div to contains
         // everything
-        StringBuilder sb = new StringBuilder(64);
         if (_scopeId != null) {
-            sb.append("<div");
-            sb.append(" scopeId=\"");
-            sb.append(_scopeId);
-            sb.append("\" ");
-            sb.append(">");
+            write("<div");
+            write(" scopeId=\"");
+            write(_scopeId);
+            write("\" ");
+            write(">");
         }
 
-        write(sb.toString());
         return EVAL_BODY_INCLUDE;
     }
 
@@ -303,8 +289,8 @@
         addAnchorRewriters();
 
         // writeout the script.
-        String s = writeScriptBlock();
-        write(s);
+        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
+        writeScriptBlock(writer);
         localRelease();
         return EVAL_PAGE;
     }
@@ -345,7 +331,7 @@
      * variable that acts as a container for the JavaScript infrastructure supported by NetUI.
      * @param sb A StringBuilder to write the new script block into
      */
-    protected void defineNetUIScope(StringBuilder sb)
+    protected void defineNetUIScope(AbstractRenderAppender sb)
     {
         assert(sb != null) : "The paramater 'sb' must not be null";
 
@@ -393,14 +379,17 @@
 
     /**
      * This will write the script block.
-     * @return String
      */
-    protected String writeScriptBlock()
+    protected void writeScriptBlock(AbstractRenderAppender sb)
     {
+        boolean script = false;
         processIdMap();
 
-        StringBuilder sb = new StringBuilder(256);
         if (_codeBlocks != null && _codeBlocks.size() > 0) {
+            if (!script) {
+                JavaScriptUtils.writeScriptStart(sb);
+                script = true;
+            }
             String s = JavaScriptUtils.getString("codeComment", null);
             sb.append(s);
             int cnt = _codeBlocks.size();
@@ -413,6 +402,10 @@
         }
 
         if (_funcBlocks != null && _funcBlocks.size() > 0) {
+            if (!script) {
+                JavaScriptUtils.writeScriptStart(sb);
+                script = true;
+            }
             String s = JavaScriptUtils.getString("functionComment", null);
             sb.append(s);
             int cnt = _funcBlocks.size();
@@ -424,13 +417,9 @@
             }
         }
 
-        if (sb.length() == 0)
-            return "";
-
-        StringBuilder out = new StringBuilder(256);
-        JavaScriptUtils.writeScriptBlock(out, sb.toString());
-        return out.toString();
-    }
+        if (script)
+            JavaScriptUtils.writeScriptEnd(sb);
+   }
 
     /////////////////////////////////// Private Support ////////////////////////////////////
 

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ScriptHeader.java	Thu Nov  4 15:03:35 2004
@@ -19,6 +19,7 @@
 
 import org.apache.beehive.netui.tags.AbstractClassicTag;
 import org.apache.beehive.netui.tags.IScriptReporter;
+import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.jsp.JspException;
@@ -92,24 +93,24 @@
      */
     public int doStartTag() throws JspException
     {
-        StringBuilder results = new StringBuilder(64);
+        //StringBuilder results = new StringBuilder(64);
         IScriptReporter sr = getScriptReporter();
         HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
 
         // write out the initialization code.
+        WriteRenderAppender writer = new WriteRenderAppender(pageContext);
         if (sr != null)
-            sr.writeInitScript(results);
+            sr.writeInitScript(writer);
 
         // write out all of the includes
         // @todo: is there a type that we should be seting on this
         // @todo: this should be found in the renderers.
         if (_tree || _divPanel) {
-            results.append("\n\t<script src=\"");
-            results.append(req.getContextPath());
-            results.append("/resources/javascript/netui-tree.js\"></script>");
+            write("\n\t<script src=\"");
+            write(req.getContextPath());
+            write("/resources/javascript/netui-tree.js\"></script>");
         }
 
-        write(results.toString());
         return EVAL_BODY_INCLUDE;
     }
 

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Select.java	Thu Nov  4 15:03:35 2004
@@ -721,26 +721,15 @@
         if (_formatterError) {
             fmtErrors = getErrorsFromBody();
         }
-
-        if (hasErrors()) {
-            reportErrors();
-            localRelease();
-            return EVAL_PAGE;
-        }
+        if (hasErrors())
+            return reportAndExit(EVAL_PAGE);
 
         _state.disabled = isDisabled();
 
         //Create hidden field for state tracking
         String realName = doNaming();
-
-        // create the string buffer for the results
-        //StringBuilder results = new StringBuilder(128);
-
-        if (hasErrors()) {
-            reportErrors();
-            localRelease();
-            return EVAL_PAGE;
-        }
+        if (hasErrors())
+            return reportAndExit(EVAL_PAGE);
 
         // Only write out the hidden field if the select is not
         // disabled.  If it is disabled, then nothing will be posted
@@ -835,8 +824,6 @@
 
         if (scriptId != null)
             write(scriptId);
-
-        //write(results.toString());
 
         // Continue processing this page
         localRelease();

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Span.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Span.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Span.java	Thu Nov  4 15:03:35 2004
@@ -181,7 +181,7 @@
         br.doStartTag(writer, _state);
 
         if (!bypassEscape)
-            write(filter(labelValue, _escapeWhiteSpace));
+            filter(labelValue, writer, _escapeWhiteSpace);
         else
             write(labelValue);
 

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextArea.java	Thu Nov  4 15:03:35 2004
@@ -205,10 +205,7 @@
 
         String text = formatText(textObject);
         if (text != null)
-            text = HtmlUtils.filter(text);
-        if (text == null)
-            text = "";
-        write(text);
+            HtmlUtils.filter(text,writer);
 
         //results.append(text);
         br.doEndTag(writer);

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/TextBox.java	Thu Nov  4 15:03:35 2004
@@ -19,10 +19,7 @@
 
 import org.apache.beehive.netui.tags.HtmlUtils;
 import org.apache.beehive.netui.tags.IHtmlAccessable;
-import org.apache.beehive.netui.tags.rendering.AbstractHtmlState;
-import org.apache.beehive.netui.tags.rendering.InputTextTag;
-import org.apache.beehive.netui.tags.rendering.TagRenderingBase;
-import org.apache.beehive.netui.tags.rendering.WriteRenderAppender;
+import org.apache.beehive.netui.tags.rendering.*;
 import org.apache.beehive.netui.util.Bundle;
 
 import javax.servlet.ServletRequest;
@@ -263,7 +260,10 @@
         String text = null;
         if (textObject != null) {
             text = formatText(textObject);
-            text = HtmlUtils.filter(text);
+            StringBuilder sb = new StringBuilder(text.length() + 16);
+            StringBuilderRenderAppender sbAppend = new StringBuilderRenderAppender(sb);
+            HtmlUtils.filter(text,sbAppend);
+            text = sb.toString();
         }
         _state.value = text;
 

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractRenderAppender.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractRenderAppender.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/AbstractRenderAppender.java	Thu Nov  4 15:03:35 2004
@@ -6,4 +6,5 @@
 abstract public class AbstractRenderAppender
 {
     abstract public void append(String s);
+    abstract public void append(char c);
 }

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/StringBuilderRenderAppender.java	Thu Nov  4 15:03:35 2004
@@ -34,4 +34,9 @@
     {
         _sb.append(s);
     }
+
+    public void append(char c)
+    {
+        _sb.append(c);
+    }
 }

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/WriteRenderAppender.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/WriteRenderAppender.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/rendering/WriteRenderAppender.java	Thu Nov  4 15:03:35 2004
@@ -1,13 +1,16 @@
 package org.apache.beehive.netui.tags.rendering;
 
-import org.apache.struts.util.ResponseUtils;
 import org.apache.beehive.netui.util.Bundle;
 import org.apache.beehive.netui.util.logging.Logger;
+import org.apache.struts.util.RequestUtils;
+import org.apache.struts.util.ResponseUtils;
 
 import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.PageContext;
+import java.io.IOException;
 
-public class WriteRenderAppender extends  AbstractRenderAppender
+public class WriteRenderAppender extends AbstractRenderAppender
 {
     private static final Logger logger = Logger.getInstance(WriteRenderAppender.class);
 
@@ -17,19 +20,38 @@
     {
     }
 
-    public WriteRenderAppender(PageContext pc) {
+    public WriteRenderAppender(PageContext pc)
+    {
         _pc = pc;
     }
 
-    public void setPageContext(PageContext pc) {
+    public void setPageContext(PageContext pc)
+    {
         _pc = pc;
     }
 
-    public void append(String s) {
+    public void append(String s)
+    {
         try {
             ResponseUtils.write(_pc, s);
         }
         catch (JspException e) {
+            logger.error(Bundle.getString("Tags_WriteException"), e);
+        }
+    }
+
+    /**
+     * This is a method not found on ResponseUtils and one that should be there.
+     * @param c
+     */
+    public void append(char c)
+    {
+        JspWriter writer = _pc.getOut();
+        try {
+            writer.print(c);
+        }
+        catch (IOException e) {
+            RequestUtils.saveException(_pc, e);
             logger.error(Bundle.getString("Tags_WriteException"), e);
         }
     }