You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by le...@apache.org on 2010/04/09 01:14:17 UTC

svn commit: r932172 - /ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java

Author: lektran
Date: Thu Apr  8 23:14:17 2010
New Revision: 932172

URL: http://svn.apache.org/viewvc?rev=932172&view=rev
Log:
Fixed a bug in the macro form renderer where the writer being passed in to the render* methods was being ignored and the writer supplied in the constructor was being used instead, this causes problems when multiple writers are being used to render a page.

Solved by ignoring the writer passed into the constructor (I'll deprecate that constructor and put in a new one shortly) and instead maintaining a separate freemarker environment for each appendable passed into the renderer using a WeakHashMap.

Modified:
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=932172&r1=932171&r2=932172&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java Thu Apr  8 23:14:17 2010
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.WeakHashMap;
 import java.util.Map.Entry;
 
 import javax.servlet.ServletContext;
@@ -89,7 +90,7 @@ public class MacroFormRenderer implement
 
     public static final String module = MacroFormRenderer.class.getName();
     private Template macroLibrary;
-    private Environment environment;
+    private WeakHashMap<Appendable, Environment> environments = new WeakHashMap<Appendable, Environment>();
     private StringUtil.SimpleEncoder internalEncoder;
     protected RequestHandler rh;
     protected HttpServletRequest request;
@@ -99,8 +100,6 @@ public class MacroFormRenderer implement
 
     public MacroFormRenderer(String macroLibraryPath, Appendable writer, HttpServletRequest request, HttpServletResponse response) throws TemplateException, IOException {
         macroLibrary = FreeMarkerWorker.getTemplate(macroLibraryPath);
-        Map<String, Object> input = UtilMisc.toMap("key", null);
-        environment = FreeMarkerWorker.renderTemplate(macroLibrary, input, writer);
         this.request = request;
         this.response = response;
         ServletContext ctx = (ServletContext) request.getAttribute("servletContext");
@@ -119,25 +118,27 @@ public class MacroFormRenderer implement
 
     private void executeMacro(Appendable writer, String macro) throws IOException {
         try {
+            Environment environment = getEnvironment(writer);
             Reader templateReader = new StringReader(macro);
             // FIXME: I am using a Date as an hack to provide a unique name for the template...
             Template template = new Template((new java.util.Date()).toString(), templateReader, FreeMarkerWorker.getDefaultOfbizConfig());
             templateReader.close();
-            if (writer != null) {
-                Map<String, Object> input = UtilMisc.toMap("key", null);
-                Environment tmpEnvironment = FreeMarkerWorker.renderTemplate(macroLibrary, input, writer);
-                tmpEnvironment.include(template);
-            } else {
-                environment.include(template);
-            }
+            environment.include(template);
         } catch (TemplateException e) {
             Debug.logError(e, "Error rendering screen thru ftl", module);
         } catch (IOException e) {
             Debug.logError(e, "Error rendering screen thru ftl", module);
         }
     }
-    private void executeMacro(String macro) throws IOException {
-        executeMacro(null, macro);
+
+    private Environment getEnvironment(Appendable writer) throws TemplateException, IOException {
+        Environment environment = environments.get(writer);
+        if (environment == null) {
+            Map<String, Object> input = UtilMisc.toMap("key", null);
+            environment = FreeMarkerWorker.renderTemplate(macroLibrary, input, writer);
+            environments.put(writer, environment);
+        }
+        return environment;
     }
 
     private void appendWhitespace(Appendable writer) throws IOException {
@@ -170,7 +171,7 @@ public class MacroFormRenderer implement
         sr.append(labelText);
         sr.append("\"");
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderDisplayField(Appendable writer, Map<String, Object> context, DisplayField displayField) throws IOException {
@@ -322,7 +323,7 @@ public class MacroFormRenderer implement
         }
 
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         if (displayField instanceof DisplayEntityField) {
             makeHyperlinkString(writer,((DisplayEntityField) displayField).getSubHyperlink(),context);
         }
@@ -410,7 +411,7 @@ public class MacroFormRenderer implement
         sr.append("\" ajaxEnabled=");
         sr.append(Boolean.toString(ajaxEnabled));
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         ModelFormField.SubHyperlink subHyperlink = textField.getSubHyperlink();
         if (subHyperlink != null && subHyperlink.shouldUse(context)) {
@@ -471,7 +472,7 @@ public class MacroFormRenderer implement
         sr.append("\" buttons=\"");
         sr.append(buttons);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         this.addAsterisks(writer, context, modelFormField);
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -656,7 +657,7 @@ public class MacroFormRenderer implement
         sr.append("\" formName=\"");
         sr.append(formName);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         this.addAsterisks(writer, context, modelFormField);
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -868,7 +869,7 @@ public class MacroFormRenderer implement
         sr.append("\" fullSearch=\"");
         sr.append(fullSearch);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         ModelFormField.SubHyperlink subHyperlink = dropDownField
                 .getSubHyperlink();
         if (subHyperlink != null && subHyperlink.shouldUse(context)) {
@@ -931,7 +932,7 @@ public class MacroFormRenderer implement
             sr.append(action);
         }
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -990,7 +991,7 @@ public class MacroFormRenderer implement
             sr.append(action);
         }
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -1067,7 +1068,7 @@ public class MacroFormRenderer implement
             sr.append(ajaxUrl);
         }
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         this.appendTooltip(writer, context, modelFormField);
     }
 
@@ -1095,7 +1096,7 @@ public class MacroFormRenderer implement
         sr.append(" title=\"");
         sr.append(title);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -1129,7 +1130,7 @@ public class MacroFormRenderer implement
             sr.append(action);
         }
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderIgnoredField(Appendable writer, Map<String, Object> context, IgnoredField ignoredField) {
@@ -1169,7 +1170,7 @@ public class MacroFormRenderer implement
                     sr.append("\" title=\"");
                     sr.append(FreeMarkerWorker.encodeDoubleQuotes(title));
                     sr.append("\" />");
-                    executeMacro(sr.toString());
+                    executeMacro(writer, sr.toString());
                 } else if (modelFormField.isSortField()) {
                     renderSortField(writer, context, modelFormField, titleText);
                 } else if (modelFormField.isRowSubmit()) {
@@ -1180,7 +1181,7 @@ public class MacroFormRenderer implement
                     sr.append("\" title=\"");
                     sr.append(titleText);
                     sr.append("\" showSelectAll=\"Y\"/>");
-                    executeMacro(sr.toString());
+                    executeMacro(writer, sr.toString());
                 } else {
                     sb.append(titleText);
                 }
@@ -1202,7 +1203,7 @@ public class MacroFormRenderer implement
             sr.append("\" title=\"");
             sr.append(sb.toString());
             sr.append("\" />");
-            executeMacro(sr.toString());
+            executeMacro(writer, sr.toString());
         }
     }
 
@@ -1248,7 +1249,7 @@ public class MacroFormRenderer implement
         sr.append("\" useRowSubmit=");
         sr.append(Boolean.toString(useRowSubmit));
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1261,7 +1262,7 @@ public class MacroFormRenderer implement
         sr.append("\" formName=\"");
         sr.append(formName);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         renderEndingBoundaryComment(writer, "Form Widget - Form Element", modelForm);
     }
 
@@ -1354,7 +1355,7 @@ public class MacroFormRenderer implement
         sr.append("\" columnStyles=[");
         sr.append(columnStyleListString);
         sr.append("] />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
     }
 
@@ -1364,7 +1365,7 @@ public class MacroFormRenderer implement
         sr.append(" formName=\"");
         sr.append(modelForm.getName());
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         if (this.renderPagination) {
             this.renderNextPrev(writer, context, modelForm);
         }
@@ -1378,13 +1379,13 @@ public class MacroFormRenderer implement
         sr.append(" style=\"");
         sr.append(headerStyle);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatHeaderRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatHeaderRowClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatHeaderRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField, int positionSpan) throws IOException {
@@ -1396,13 +1397,13 @@ public class MacroFormRenderer implement
         sr.append("\" positionSpan=");
         sr.append(Integer.toString(positionSpan));
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatHeaderRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatHeaderRowCellClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatHeaderRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1412,13 +1413,13 @@ public class MacroFormRenderer implement
         sr.append(" style=\"");
         sr.append(areaStyle);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatHeaderRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatHeaderRowFormCellClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatHeaderRowFormCellTitleSeparator(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField, boolean isLast) throws IOException {
@@ -1430,7 +1431,7 @@ public class MacroFormRenderer implement
         sr.append("\" isLast=");
         sr.append(Boolean.toString(isLast));
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatItemRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1459,7 +1460,7 @@ public class MacroFormRenderer implement
         sr.append("\" oddRowStyle=\"");
         sr.append(oddRowStyle);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatItemRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1468,7 +1469,7 @@ public class MacroFormRenderer implement
         sr.append(" formName=\"");
         sr.append(modelForm.getName());
         sr.append("\"/>");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatItemRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField, int positionSpan) throws IOException {
@@ -1482,7 +1483,7 @@ public class MacroFormRenderer implement
         sr.append("\" positionSpan=");
         sr.append(Integer.toString(positionSpan));
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatItemRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField) throws IOException {
@@ -1491,7 +1492,7 @@ public class MacroFormRenderer implement
         sr.append(" fieldName=\"");
         sr.append(modelFormField.getName());
         sr.append("\"/>");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatItemRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1501,13 +1502,13 @@ public class MacroFormRenderer implement
         sr.append(" style=\"");
         sr.append(areaStyle);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatItemRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatItemRowFormCellClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatSingleWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1519,7 +1520,7 @@ public class MacroFormRenderer implement
         sr.append("\" style=\"");
         sr.append(style);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatSingleWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
@@ -1528,19 +1529,19 @@ public class MacroFormRenderer implement
         sr.append(" formName=\"");
         sr.append(modelForm.getName());
         sr.append("\"/>");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatFieldRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatFieldRowOpen />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatFieldRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatFieldRowClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatFieldRowTitleCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException {
@@ -1550,13 +1551,13 @@ public class MacroFormRenderer implement
         sr.append(" style=\"");
         sr.append(style);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatFieldRowTitleCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatFieldRowTitleCellClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatFieldRowSpacerCell(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException {
@@ -1571,20 +1572,20 @@ public class MacroFormRenderer implement
         sr.append(" style=\"");
         sr.append(areaStyle);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
     }
 
     public void renderFormatFieldRowWidgetCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions, int positionSpan, Integer nextPositionInRow) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatFieldRowWidgetCellClose />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFormatEmptySpace(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException {
         StringWriter sr = new StringWriter();
         sr.append("<@renderFormatEmptySpace />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderTextFindField(Appendable writer, Map<String, Object> context, TextFindField textFindField) throws IOException {
@@ -1674,7 +1675,7 @@ public class MacroFormRenderer implement
         sr.append(" ignoreCase=\"");
         sr.append(ignoreCase);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -1760,7 +1761,7 @@ public class MacroFormRenderer implement
         sr.append("\" defaultOptionThru=\"");
         sr.append(defaultOptionThru);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -1895,7 +1896,7 @@ public class MacroFormRenderer implement
         sr.append("\" opIsEmpty=\"");
         sr.append(opIsEmpty);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.appendTooltip(writer, context, modelFormField);
     }
@@ -2060,7 +2061,7 @@ public class MacroFormRenderer implement
         sr.append("\" clearText=\"");
         sr.append(clearText);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.addAsterisks(writer, context, modelFormField);
 
@@ -2318,7 +2319,7 @@ public class MacroFormRenderer implement
         sr.append("\" paginateViewSizeLabel=\"");
         sr.append(paginateViewSizeLabel);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFileField(Appendable writer, Map<String, Object> context, FileField textField) throws IOException {
@@ -2365,7 +2366,7 @@ public class MacroFormRenderer implement
         sr.append("\" autocomplete=\"");
         sr.append(autocomplete);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.makeHyperlinkString(writer, textField.getSubHyperlink(), context);
 
@@ -2424,7 +2425,7 @@ public class MacroFormRenderer implement
         sr.append("\" autocomplete=\"");
         sr.append(autocomplete);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
         this.addAsterisks(writer, context, modelFormField);
 
@@ -2488,7 +2489,7 @@ public class MacroFormRenderer implement
         sr.append("\" action=\"");
         sr.append(action==null?"":action);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
         this.makeHyperlinkString(writer, imageField.getSubHyperlink(), context);
 
         this.appendTooltip(writer, context, modelFormField);
@@ -2536,7 +2537,7 @@ public class MacroFormRenderer implement
         sr.append("\" collapseToolTip=\"");
         sr.append(collapseToolTip);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderFieldGroupClose(Appendable writer, Map<String, Object> context, ModelForm.FieldGroup fieldGroup) throws IOException {
@@ -2559,7 +2560,7 @@ public class MacroFormRenderer implement
             sr.append(title);
         }
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderBanner(Appendable writer, Map<String, Object> context, ModelForm.Banner banner) throws IOException {
@@ -2599,7 +2600,7 @@ public class MacroFormRenderer implement
         sr.append("\" rightText=\"");
         sr.append(rightText);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
 
@@ -2620,7 +2621,7 @@ public class MacroFormRenderer implement
             sr.append("\" widgetName=\"");
             sr.append(modelWidget.getBoundaryCommentName());
             sr.append("\" />");
-            executeMacro(sr.toString());
+            executeMacro(writer, sr.toString());
         }
     }
 
@@ -2641,7 +2642,7 @@ public class MacroFormRenderer implement
             sr.append("\" widgetName=\"");
             sr.append(modelWidget.getBoundaryCommentName());
             sr.append("\" />");
-            executeMacro(sr.toString());
+            executeMacro(writer, sr.toString());
         }
     }
 
@@ -2730,7 +2731,7 @@ public class MacroFormRenderer implement
         sr.append("\" ajaxEnabled=");
         sr.append(Boolean.toString(ajaxEnabled));
         sr.append(" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
 
     }
     /** Create an ajaxXxxx JavaScript CSV string from a list of UpdateArea objects. See
@@ -2789,7 +2790,7 @@ public class MacroFormRenderer implement
         sr.append("\" tooltipStyle=\"");
         sr.append(modelFormField.getTooltipStyle());
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
     public void makeHyperlinkString(Appendable writer, ModelFormField.SubHyperlink subHyperlink, Map<String, Object> context) throws IOException {
         if (subHyperlink == null) {
@@ -2816,7 +2817,7 @@ public class MacroFormRenderer implement
         sr.append("\" requiredStyle=\"");
         sr.append(requiredStyle);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
     public void appendContentUrl(Appendable writer, String location) throws IOException {
         StringBuilder buffer = new StringBuilder();
@@ -2912,7 +2913,7 @@ public class MacroFormRenderer implement
             sr.append("\" confirmation =\"");
             sr.append(confirmation );
             sr.append("\" />");
-            executeMacro(sr.toString());
+            executeMacro(writer, sr.toString());
         }
     }
 
@@ -2949,7 +2950,7 @@ public class MacroFormRenderer implement
             sr.append("\" confirmation =\"");
             sr.append(confirmation );
             sr.append("\" />");
-            executeMacro(sr.toString());
+            executeMacro(writer, sr.toString());
         }
     }
 
@@ -2983,7 +2984,7 @@ public class MacroFormRenderer implement
         sr.append(" targetWindow=\"");
         sr.append(targetWindow);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 
     public void renderContainerFindField(Appendable writer,
@@ -2999,6 +3000,6 @@ public class MacroFormRenderer implement
         sr.append("\" class=\"");
         sr.append(className);
         sr.append("\" />");
-        executeMacro(sr.toString());
+        executeMacro(writer, sr.toString());
     }
 }