
CommandLink JS update.


SECTION: Modified Files
----------------------------

M src/com/sun/faces/renderkit/RenderKitUtils.java
 - Move the param removal/addition JS into a static
   string.  The JS will now register the methods
   on all forms so that we don't have to render
   this multiple times if there are multiple forms.

M src/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java
 - Just store a value in the request map instead directly
   indicating the add/remove JS has been written

M systest/web/golden/interweaving11.txt
M systest/web/golden/regression/InjectUserDefJS.txt
M systest/web/golden/taglib/commandLink_multiform_test.txt
M systest/web/golden/taglib/commandLink_test.txt
M web/test/CorrectRenderersResponse
M web/test/RenderResponse_correct
  - test updates



SECTION: Diffs
----------------------------
Index: src/com/sun/faces/renderkit/RenderKitUtils.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/renderkit/RenderKitUtils.java,v
retrieving revision 1.16
diff -u -r1.16 RenderKitUtils.java
--- src/com/sun/faces/renderkit/RenderKitUtils.java	26 Jul 2006 20:30:34 -0000	1.16
+++ src/com/sun/faces/renderkit/RenderKitUtils.java	27 Jul 2006 20:24:33 -0000
@@ -180,7 +180,44 @@
      * Example: text/html </p>
      */
     private final static String CONTENT_TYPE_SUBTYPE_DELIMITER = "/";
-
+    
+    private final static String FORM_INIT_JS =
+        "\nfor (var f = 0; f < document.forms.length; f++) {"
+          + "\n    var form = document.forms[f];"
+          + "\n    form.deleteParams = function() {"      
+          + "\n        var addedParams = this.addedParams;"
+          + "\n        if (addedParams != null) {"        
+          + "\n            for (var i = 0; i < addedParams.length; i++) {"
+          + "\n                this.removeChild(addedParams[i]);"
+          + "\n            }"
+          + "\n        }"
+          + "\n        this.addedParams = null;"
+          + "\n    }"        
+          + "\n    var oldOnSubmit = form.onsubmit"
+          + "\n    if (oldOnSubmit == null) {"       
+          + "\n        form.onsubmit = form.deleteParams"
+          + "\n    } else {"      
+          + "\n        form.onsubmit = function() {"
+          + "\n            form.deleteParams();"
+          + "\n            oldOnSubmit();"       
+          + "\n        }"
+          + "\n    }"
+          + "\n    form.addParams = function(paramValuePairs) {"
+          + "\n        this.deleteParams();"
+          + "\n        var addedParams = new Array();"
+          + "\n        this.addedParams = addedParams;"
+          + "\n        var params = paramValuePairs.split(',');"
+          + "\n        for (var i = 0, ii = 0; i < params.length; i++, ii++) {"        
+          + "\n            var param = document.createElement(\"input\");"
+          + "\n            param.type = \"hidden\";"
+          + "\n            param.name = params[i];"
+          + "\n            param.value = params[i + 1];"
+          + "\n            this.appendChild(param);"
+          + "\n            addedParams[ii] = param"
+          + "\n            i = i + 1;"
+          + "\n        }"
+          + "\n    }"
+          + "\n}";
 
     // ------------------------------------------------------------ Constructors
 
@@ -842,12 +879,10 @@
     /**
      * <p>Renders the Javascript necessary to add and remove request
      * parameters to the current form.</p>
-     * @param formClientId the client ID of the form
      * @param writer the <code>ResponseWriter</code>
      * @throws java.io.IOException if an error occurs writing to the response
      */
-    public static void renderAddParamToFormJavaScript(String formClientId,
-                                                      ResponseWriter writer) 
+    public static void renderFormInitScript(ResponseWriter writer) 
     throws IOException {
         
         boolean isXhtml = 
@@ -862,42 +897,9 @@
         } else {
             writer.write("\n<!--");
         }
-        writer.write("\n    var form = document.getElementById('");
-        writer.write(formClientId);
-        writer.write("');");
-        writer.write("\n    form.deleteParams = function() {");      
-        writer.write("\n        var addedParams = this.addedParams;");
-        writer.write("\n        if (addedParams != null) {");        
-        writer.write("\n            for (var i = 0; i < addedParams.length; i++) {");
-        writer.write("\n                this.removeChild(addedParams[i]);");
-        writer.write("\n            }");
-        writer.write("\n        }");
-        writer.write("\n        this.addedParams = null;");
-        writer.write("\n    }");        
-        writer.write("\n    var oldOnSubmit = form.onsubmit");
-        writer.write("\n    if (oldOnSubmit == null) {");       
-        writer.write("\n        form.onsubmit = form.deleteParams");
-        writer.write("\n    } else {");      
-        writer.write("\n        form.onsubmit = function() {");
-        writer.write("\n            form.deleteParams();");
-        writer.write("\n            oldOnSubmit();");       
-        writer.write("\n        }");
-        writer.write("\n    }");
-        writer.write("\n    form.addParams = function(paramValuePairs) {");
-        writer.write("\n        this.deleteParams();");
-        writer.write("\n        var addedParams = new Array();");
-        writer.write("\n        this.addedParams = addedParams;");
-        writer.write("\n        var params = paramValuePairs.split(',');");
-        writer.write("\n        for (var i = 0, ii = 0; i < params.length; i++, ii++) {");        
-        writer.write("\n            var param = document.createElement(\"input\");");
-        writer.write("\n            param.type = \"hidden\";");
-        writer.write("\n            param.name = params[i];");
-        writer.write("\n            param.value = params[i + 1];");
-        writer.write("\n            this.appendChild(param);");
-        writer.write("\n            addedParams[ii] = param");
-        writer.write("\n            i = i + 1;");
-        writer.write("\n        }");
-        writer.write("\n    }");       
+        
+        writer.write(FORM_INIT_JS);
+        
         if (isXhtml) {
             writer.write("\n//]]>\n");            
         } else {
Index: src/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/src/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java,v
retrieving revision 1.52
diff -u -r1.52 CommandLinkRenderer.java
--- src/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java	25 Jul 2006 21:06:03 -0000	1.52
+++ src/com/sun/faces/renderkit/html_basic/CommandLinkRenderer.java	27 Jul 2006 20:24:33 -0000
@@ -39,8 +39,6 @@
 import javax.faces.event.ActionEvent;
 
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.logging.Level;
 
 import com.sun.faces.RIConstants;
@@ -158,11 +156,11 @@
         if (componentDisabled || formClientId == null) {
             renderAsDisabled(context, command);
         } else {
-            if (!hasScriptBeenRendered(context, formClientId)) {
+            if (!hasScriptBeenRendered(context)) {
                 RenderKitUtils
-                      .renderAddParamToFormJavaScript(formClientId,
-                                                      context.getResponseWriter());
-                setScriptAsRendered(context, formClientId);
+                      .renderFormInitScript(
+                            context.getResponseWriter());
+                setScriptAsRendered(context);
             }
             renderAsActive(context, command);
         }
@@ -378,39 +376,28 @@
 
 
     /**
-     * @param context the <code>FacesContext</code> for the current request
-     * @param formClientId the client ID of the form
+     * @param context the <code>FacesContext</code> for the current request    
      * @return <code>true</code> If the <code>add/remove</code> javascript
      *  has been rendered, otherwise <code>false</code>
      */
-    private static boolean hasScriptBeenRendered(FacesContext context,
-                                                 String formClientId) {
+    private static boolean hasScriptBeenRendered(FacesContext context) {
 
-        Map scriptState = (Map)
-              context.getExternalContext().getRequestMap()
-                    .get(SCRIPT_STATE);
-        return (scriptState != null && scriptState.containsKey(formClientId));
+        return (context.getExternalContext().getRequestMap()
+              .get(SCRIPT_STATE) != null);
 
     }
 
     /**
      * <p>Set a flag to indicate that the <code>add/remove</code> javascript
      *  has been rendered for the current form.
-     * @param context the <code>FacesContext</code> of the current request
-     * @param formClientId the form client ID
+     * @param context the <code>FacesContext</code> of the current request    
      */
     @SuppressWarnings("unchecked")
-    private static void setScriptAsRendered(FacesContext context,
-                                            String formClientId) {
-        
-        Map requestMap = context.getExternalContext().getRequestMap();
-        Map scriptState = (Map) requestMap.get(SCRIPT_STATE);
-        if (scriptState == null) {
-            scriptState = new HashMap(2, 1.0f);
-            requestMap.put(SCRIPT_STATE, scriptState);
-        }
-        scriptState.put(formClientId, Boolean.TRUE);
-        
+    private static void setScriptAsRendered(FacesContext context) {
+
+        context.getExternalContext().getRequestMap()
+              .put(SCRIPT_STATE, Boolean.TRUE);
+
     }
 
 
Index: systest/web/golden/interweaving11.txt
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/systest/web/golden/interweaving11.txt,v
retrieving revision 1.2
diff -u -r1.2 interweaving11.txt
--- systest/web/golden/interweaving11.txt	25 Jul 2006 21:06:09 -0000	1.2
+++ systest/web/golden/interweaving11.txt	27 Jul 2006 20:24:33 -0000
@@ -9,24 +9,33 @@
       <title>interweaving11</title>   
   </head>
   <body>
-    <form id="j_id_id17" name="j_id_id17" method="post" action="/jsf-systest/faces/interweaving11.jsp;jsessionid=70ba0938b3e2b0663a3309083dbf" enctype="application/x-www-form-urlencoded">
+    <form id="j_id_id17" name="j_id_id17" method="post" action="/jsf-systest/faces/interweaving11.jsp;jsessionid=19b35531ccf17bffd5dd89af0ba7" enctype="application/x-www-form-urlencoded">
 
 <script type="text/javascript" language="Javascript">
 <!--
-    document.getElementById('j_id_id17').addParams = function(paramValuePairs) {
+for (var f = 0; f < document.forms.length; f++) {
+    var form = document.forms[f];
+    form.deleteParams = function() {
         var addedParams = this.addedParams;
         if (addedParams != null) {
             for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
+                this.removeChild(addedParams[i]);
             }
         }
-        addedParams = new Array();
+        this.addedParams = null;
+    }
+    var oldOnSubmit = form.onsubmit
+    if (oldOnSubmit == null) {
+        form.onsubmit = form.deleteParams
+    } else {
+        form.onsubmit = function() {
+            form.deleteParams();
+            oldOnSubmit();
+        }
+    }
+    form.addParams = function(paramValuePairs) {
+        this.deleteParams();
+        var addedParams = new Array();
         this.addedParams = addedParams;
         var params = paramValuePairs.split(',');
         for (var i = 0, ii = 0; i < params.length; i++, ii++) {
@@ -35,10 +44,11 @@
             param.name = params[i];
             param.value = params[i + 1];
             this.appendChild(param);
-            addedParams[ii] = params[i]
+            addedParams[ii] = param
             i = i + 1;
         }
     }
+}
 //-->
 </script>
 <a href="#" onclick="document.forms['j_id_id17'].addParams('j_id_id17:j_id_id21,j_id_id17:j_id_id21,param,value'); document.forms['j_id_id17'].submit(); return false;">one</a>
Index: systest/web/golden/regression/InjectUserDefJS.txt
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/systest/web/golden/regression/InjectUserDefJS.txt,v
retrieving revision 1.3
diff -u -r1.3 InjectUserDefJS.txt
--- systest/web/golden/regression/InjectUserDefJS.txt	25 Jul 2006 21:06:11 -0000	1.3
+++ systest/web/golden/regression/InjectUserDefJS.txt	27 Jul 2006 20:24:33 -0000
@@ -11,24 +11,33 @@
         <title>User Defined JS Injection Test</title>        
     </head>
     <body>
-        <form id="j_id_id16" name="j_id_id16" method="post" action="/jsf-systest/faces/regression/InjectUserDefJS.jsp;jsessionid=711ef4fe1267f0932e7b9f84540b" enctype="application/x-www-form-urlencoded">
+        <form id="j_id_id16" name="j_id_id16" method="post" action="/jsf-systest/faces/regression/InjectUserDefJS.jsp;jsessionid=1a37c5d8e528009639a2542d0dbc" enctype="application/x-www-form-urlencoded">
 
 <script type="text/javascript" language="Javascript">
 <!--
-    document.getElementById('j_id_id16').addParams = function(paramValuePairs) {
+for (var f = 0; f < document.forms.length; f++) {
+    var form = document.forms[f];
+    form.deleteParams = function() {
         var addedParams = this.addedParams;
         if (addedParams != null) {
             for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
+                this.removeChild(addedParams[i]);
             }
         }
-        addedParams = new Array();
+        this.addedParams = null;
+    }
+    var oldOnSubmit = form.onsubmit
+    if (oldOnSubmit == null) {
+        form.onsubmit = form.deleteParams
+    } else {
+        form.onsubmit = function() {
+            form.deleteParams();
+            oldOnSubmit();
+        }
+    }
+    form.addParams = function(paramValuePairs) {
+        this.deleteParams();
+        var addedParams = new Array();
         this.addedParams = addedParams;
         var params = paramValuePairs.split(',');
         for (var i = 0, ii = 0; i < params.length; i++, ii++) {
@@ -37,10 +46,11 @@
             param.name = params[i];
             param.value = params[i + 1];
             this.appendChild(param);
-            addedParams[ii] = params[i]
+            addedParams[ii] = param
             i = i + 1;
         }
     }
+}
 //-->
 </script>
 <a href="#" onclick="var a=function(){alert('Are you sure?');};var b=function(){document.forms['j_id_id16'].addParams('j_id_id16:j_id_id18,j_id_id16:j_id_id18'); document.forms['j_id_id16'].submit(); return false;};return (a()==false) ? false : b();">Link</a><input type="submit" name="j_id_id16:j_id_id20" value="Button" onclick="alert('Are you sure?')" /><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id319:j_id320" /><input type="hidden" name="j_id_id16" value="j_id_id16" /></form>
Index: systest/web/golden/taglib/commandLink_multiform_test.txt
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/systest/web/golden/taglib/commandLink_multiform_test.txt,v
retrieving revision 1.12
diff -u -r1.12 commandLink_multiform_test.txt
--- systest/web/golden/taglib/commandLink_multiform_test.txt	25 Jul 2006 21:06:06 -0000	1.12
+++ systest/web/golden/taglib/commandLink_multiform_test.txt	27 Jul 2006 20:24:33 -0000
@@ -6,56 +6,33 @@
                                                                                 
 <html>
   <body>
-     <form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp;jsessionid=70fa669f5b2c90981d3f07d57106" enctype="application/x-www-form-urlencoded">
+     <form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp;jsessionid=19e2c6b111dd0f2dee4d6ba2ea48" enctype="application/x-www-form-urlencoded">
 
 <script type="text/javascript" language="Javascript">
 <!--
-    document.getElementById('form01').addParams = function(paramValuePairs) {
+for (var f = 0; f < document.forms.length; f++) {
+    var form = document.forms[f];
+    form.deleteParams = function() {
         var addedParams = this.addedParams;
         if (addedParams != null) {
             for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
+                this.removeChild(addedParams[i]);
             }
         }
-        addedParams = new Array();
-        this.addedParams = addedParams;
-        var params = paramValuePairs.split(',');
-        for (var i = 0, ii = 0; i < params.length; i++, ii++) {
-            var param = document.createElement("input");
-            param.type = "hidden";
-            param.name = params[i];
-            param.value = params[i + 1];
-            this.appendChild(param);
-            addedParams[ii] = params[i]
-            i = i + 1;
-        }
+        this.addedParams = null;
     }
-//-->
-</script>
-<a id="form01:Link1" href="#" onclick="document.forms['form01'].addParams('form01:Link1,form01:Link1,param1,value1,param2,value2'); document.forms['form01'].submit(); return false;">Link1</a><a id="form01:Link2" href="#" onclick="document.forms['form01'].addParams('form01:Link2,form01:Link2,param1,value1,param2,value2'); document.forms['form01'].submit(); return false;">Link2</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id233:j_id234" /><input type="hidden" name="form01" value="form01" /></form><form id="form02" name="form02" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp;jsessionid=70fa669f5b2c90981d3f07d57106" enctype="application/x-www-form-urlencoded">
-
-<script type="text/javascript" language="Javascript">
-<!--
-    document.getElementById('form02').addParams = function(paramValuePairs) {
-        var addedParams = this.addedParams;
-        if (addedParams != null) {
-            for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
-            }
+    var oldOnSubmit = form.onsubmit
+    if (oldOnSubmit == null) {
+        form.onsubmit = form.deleteParams
+    } else {
+        form.onsubmit = function() {
+            form.deleteParams();
+            oldOnSubmit();
         }
-        addedParams = new Array();
+    }
+    form.addParams = function(paramValuePairs) {
+        this.deleteParams();
+        var addedParams = new Array();
         this.addedParams = addedParams;
         var params = paramValuePairs.split(',');
         for (var i = 0, ii = 0; i < params.length; i++, ii++) {
@@ -64,12 +41,14 @@
             param.name = params[i];
             param.value = params[i + 1];
             this.appendChild(param);
-            addedParams[ii] = params[i]
+            addedParams[ii] = param
             i = i + 1;
         }
     }
+}
 //-->
 </script>
+<a id="form01:Link1" href="#" onclick="document.forms['form01'].addParams('form01:Link1,form01:Link1,param1,value1,param2,value2'); document.forms['form01'].submit(); return false;">Link1</a><a id="form01:Link2" href="#" onclick="document.forms['form01'].addParams('form01:Link2,form01:Link2,param1,value1,param2,value2'); document.forms['form01'].submit(); return false;">Link2</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id233:j_id234" /><input type="hidden" name="form01" value="form01" /></form><form id="form02" name="form02" method="post" action="/jsf-systest/faces/taglib/commandLink_multiform_test.jsp;jsessionid=19e2c6b111dd0f2dee4d6ba2ea48" enctype="application/x-www-form-urlencoded">
 <a id="form02:Link3" href="#" onclick="document.forms['form02'].addParams('form02:Link3,form02:Link3,param3,value3,param4,value4'); document.forms['form02'].submit(); return false;">Link3</a><a id="form02:Link4" href="#" onclick="document.forms['form02'].addParams('form02:Link4,form02:Link4'); document.forms['form02'].submit(); return false;">Link4</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id233:j_id234" /><input type="hidden" name="form02" value="form02" /></form>
   </body>
 </html>
Index: systest/web/golden/taglib/commandLink_test.txt
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/systest/web/golden/taglib/commandLink_test.txt,v
retrieving revision 1.16
diff -u -r1.16 commandLink_test.txt
--- systest/web/golden/taglib/commandLink_test.txt	25 Jul 2006 21:06:06 -0000	1.16
+++ systest/web/golden/taglib/commandLink_test.txt	27 Jul 2006 20:24:33 -0000
@@ -10,24 +10,33 @@
 </head>
 <body>
     
-    <form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandLink_test.jsp;jsessionid=70d6fd67fbf5a07b12b65aa300d4" enctype="application/x-www-form-urlencoded">
+    <form id="form01" name="form01" method="post" action="/jsf-systest/faces/taglib/commandLink_test.jsp;jsessionid=19cb1835ea665064cd0232dbbaa8" enctype="application/x-www-form-urlencoded">
 
 <script type="text/javascript" language="Javascript">
 <!--
-    document.getElementById('form01').addParams = function(paramValuePairs) {
+for (var f = 0; f < document.forms.length; f++) {
+    var form = document.forms[f];
+    form.deleteParams = function() {
         var addedParams = this.addedParams;
         if (addedParams != null) {
             for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
+                this.removeChild(addedParams[i]);
             }
         }
-        addedParams = new Array();
+        this.addedParams = null;
+    }
+    var oldOnSubmit = form.onsubmit
+    if (oldOnSubmit == null) {
+        form.onsubmit = form.deleteParams
+    } else {
+        form.onsubmit = function() {
+            form.deleteParams();
+            oldOnSubmit();
+        }
+    }
+    form.addParams = function(paramValuePairs) {
+        this.deleteParams();
+        var addedParams = new Array();
         this.addedParams = addedParams;
         var params = paramValuePairs.split(',');
         for (var i = 0, ii = 0; i < params.length; i++, ii++) {
@@ -36,13 +45,14 @@
             param.name = params[i];
             param.value = params[i + 1];
             this.appendChild(param);
-            addedParams[ii] = params[i]
+            addedParams[ii] = param
             i = i + 1;
         }
     }
+}
 //-->
 </script>
-<a id="form01:hyperlink01" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink01,form01:hyperlink01'); document.forms['form01'].submit(); return false;">My Link</a><a id="form01:hyperlink02" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink02,form01:hyperlink02'); document.forms['form01'].submit(); return false;">This is a String property</a><a id="form01:hyperlink03" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink03,form01:hyperlink03'); document.forms['form01'].submit(); return false;">RES-BUNDLE LINK</a><a id="form01:hyperlink04" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink04,form01:hyperlink04'); document.forms['form01'].submit(); return false;"><img src="duke.gif" /></a><a id="form01:hyperlink05" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink05,form01:hyperlink05'); document.forms['form01'].submit(); return false;"><img src="resbundle_image.gif;jsessionid=70d6fd67fbf5a07b12b65aa300d4" /></a><a id="form01:hyperlink06" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink06,form01:hyperlink06,param1,value1'); document.forms['form01'].submit(); return false;">Paramter Link</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id231:j_id232" /><input type="hidden" name="form01" value="form01" /></form>
+<a id="form01:hyperlink01" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink01,form01:hyperlink01'); document.forms['form01'].submit(); return false;">My Link</a><a id="form01:hyperlink02" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink02,form01:hyperlink02'); document.forms['form01'].submit(); return false;">This is a String property</a><a id="form01:hyperlink03" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink03,form01:hyperlink03'); document.forms['form01'].submit(); return false;">RES-BUNDLE LINK</a><a id="form01:hyperlink04" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink04,form01:hyperlink04'); document.forms['form01'].submit(); return false;"><img src="duke.gif" /></a><a id="form01:hyperlink05" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink05,form01:hyperlink05'); document.forms['form01'].submit(); return false;"><img src="resbundle_image.gif;jsessionid=19cb1835ea665064cd0232dbbaa8" /></a><a id="form01:hyperlink06" href="#" onclick="document.forms['form01'].addParams('form01:hyperlink06,form01:hyperlink06,param1,value1'); document.forms['form01'].submit(); return false;">Paramter Link</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id231:j_id232" /><input type="hidden" name="form01" value="form01" /></form>
 </body>
 </html>
 
Index: web/test/CorrectRenderersResponse
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/web/test/CorrectRenderersResponse,v
retrieving revision 1.44
diff -u -r1.44 CorrectRenderersResponse
--- web/test/CorrectRenderersResponse	25 Jul 2006 21:06:10 -0000	1.44
+++ web/test/CorrectRenderersResponse	27 Jul 2006 20:24:34 -0000
@@ -1,7 +1,7 @@
-<form id="formRenderer0" name="formRenderer0" method="post" action="/test/JspRedirector/root;jsessionid=6fd153636505c037f1e195e04f22">
+<form id="formRenderer0" name="formRenderer0" method="post" action="/test/JspRedirector/root;jsessionid=195e6f24e049f0593e702019924c">
 
 ~com.sun.faces.saveStateFieldMarker~<input type="hidden" name="formRenderer0" value="formRenderer0" /></form>
-<form id="formRenderer1" name="formRenderer1" method="post" action="/test/JspRedirector/root;jsessionid=6fd153636505c037f1e195e04f22">
+<form id="formRenderer1" name="formRenderer1" method="post" action="/test/JspRedirector/root;jsessionid=195e6f24e049f0593e702019924c">
 
 ~com.sun.faces.saveStateFieldMarker~<input type="hidden" name="formRenderer1" value="formRenderer1" /></form>
 <table border="0" id="radioRenderer" class="styleClass">
@@ -22,36 +22,45 @@
 	</tr>
 </table></td>	</tr>
 </table>
-<input id="imageButton" type="image" src="duke.gif;jsessionid=6fd153636505c037f1e195e04f22" name="imageButton" />
-<input id="imageButton2" type="image" src="resduke.gif;jsessionid=6fd153636505c037f1e195e04f22" name="imageButton2" />
+<input id="imageButton" type="image" src="duke.gif;jsessionid=195e6f24e049f0593e702019924c" name="imageButton" />
+<input id="imageButton2" type="image" src="resduke.gif;jsessionid=195e6f24e049f0593e702019924c" name="imageButton2" />
 <input id="labelButton1" type="submit" name="labelButton1" value="PASSED" />
 <input id="labelButton2" type="reset" name="labelButton2" value="model label" />
 <input id="labelButton3" type="submit" name="labelButton3" value="RES-BUNDLE PASSED" />
 <input id="labelButton4" type="reset" name="labelButton4" value="" />
-<a id="labelLink1" name="labelLink1" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22">PASSED</a>
-<a id="labelLink2" name="labelLink2" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22">model label</a>
-<a id="labelLink3" name="labelLink3" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22">RES-BUNDLE PASSED</a>
-<a id="labelLink4" name="labelLink4" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22" coords="coords" hreflang="hreflang" rel="rel" rev="rev" shape="shape"></a>
-<a id="linkImage" name="linkImage" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22"><img src="duke.gif;jsessionid=6fd153636505c037f1e195e04f22" /></a>
-<a id="linkImage2" name="linkImage2" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22"><img src="resduke.gif;jsessionid=6fd153636505c037f1e195e04f22" /></a>
-<a id="paramLink" name="paramLink" href="hrefValue;jsessionid=6fd153636505c037f1e195e04f22?parameter1=param_value1&parameter2=param_value2"><img src="resduke.gif;jsessionid=6fd153636505c037f1e195e04f22" /></a>
+<a id="labelLink1" name="labelLink1" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c">PASSED</a>
+<a id="labelLink2" name="labelLink2" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c">model label</a>
+<a id="labelLink3" name="labelLink3" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c">RES-BUNDLE PASSED</a>
+<a id="labelLink4" name="labelLink4" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c" coords="coords" hreflang="hreflang" rel="rel" rev="rev" shape="shape"></a>
+<a id="linkImage" name="linkImage" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c"><img src="duke.gif;jsessionid=195e6f24e049f0593e702019924c" /></a>
+<a id="linkImage2" name="linkImage2" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c"><img src="resduke.gif;jsessionid=195e6f24e049f0593e702019924c" /></a>
+<a id="paramLink" name="paramLink" href="hrefValue;jsessionid=195e6f24e049f0593e702019924c?parameter1=param_value1&parameter2=param_value2"><img src="resduke.gif;jsessionid=195e6f24e049f0593e702019924c" /></a>
 
 <script type="text/javascript" language="Javascript"
 <!--
-    document.getElementById('j_id0').addParams = function(paramValuePairs) {
+for (var f = 0; f < document.forms.length; f++) {
+    var form = document.forms[f];
+    form.deleteParams = function() {
         var addedParams = this.addedParams;
         if (addedParams != null) {
             for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
+                this.removeChild(addedParams[i]);
             }
         }
-        addedParams = new Array();
+        this.addedParams = null;
+    }
+    var oldOnSubmit = form.onsubmit
+    if (oldOnSubmit == null) {
+        form.onsubmit = form.deleteParams
+    } else {
+        form.onsubmit = function() {
+            form.deleteParams();
+            oldOnSubmit();
+        }
+    }
+    form.addParams = function(paramValuePairs) {
+        this.deleteParams();
+        var addedParams = new Array();
         this.addedParams = addedParams;
         var params = paramValuePairs.split(',');
         for (var i = 0, ii = 0; i < params.length; i++, ii++) {
@@ -60,16 +69,17 @@
             param.name = params[i];
             param.value = params[i + 1];
             this.appendChild(param);
-            addedParams[ii] = params[i]
+            addedParams[ii] = param
             i = i + 1;
         }
     }
+}
 //-->
 ></script>
 <a id="j_id0:labelLink1" href="#" onclick="document.forms['j_id0'].addParams('j_id0:labelLink1,j_id0:labelLink1'); document.forms['j_id0'].submit(); return false;">PASSED</a>
 <a id="j_id0:labelLink2" href="#" onclick="document.forms['j_id0'].addParams('j_id0:labelLink2,j_id0:labelLink2'); document.forms['j_id0'].submit(); return false;">model label</a>
 <a id="j_id0:labelLink3" href="#" onclick="document.forms['j_id0'].addParams('j_id0:labelLink3,j_id0:labelLink3'); document.forms['j_id0'].submit(); return false;">RES-BUNDLE PASSED</a>
 <a id="j_id0:labelLink4" href="#" coords="coords" hreflang="hreflang" rel="rel" rev="rev" shape="shape" onclick="document.forms['j_id0'].addParams('j_id0:labelLink4,j_id0:labelLink4'); document.forms['j_id0'].submit(); return false;"></a>
-<a id="j_id0:linkImage" href="#" onclick="document.forms['j_id0'].addParams('j_id0:linkImage,j_id0:linkImage'); document.forms['j_id0'].submit(); return false;"><img src="duke.gif;jsessionid=6fd153636505c037f1e195e04f22" /></a>
-<a id="j_id0:linkImage2" href="#" onclick="document.forms['j_id0'].addParams('j_id0:linkImage2,j_id0:linkImage2'); document.forms['j_id0'].submit(); return false;"><img src="resduke.gif;jsessionid=6fd153636505c037f1e195e04f22" /></a>
+<a id="j_id0:linkImage" href="#" onclick="document.forms['j_id0'].addParams('j_id0:linkImage,j_id0:linkImage'); document.forms['j_id0'].submit(); return false;"><img src="duke.gif;jsessionid=195e6f24e049f0593e702019924c" /></a>
+<a id="j_id0:linkImage2" href="#" onclick="document.forms['j_id0'].addParams('j_id0:linkImage2,j_id0:linkImage2'); document.forms['j_id0'].submit(); return false;"><img src="resduke.gif;jsessionid=195e6f24e049f0593e702019924c" /></a>
 <a id="j_id0:paramLink" href="#" onclick="document.forms['j_id0'].addParams('j_id0:paramLink,j_id0:paramLink,parameter1,param_value1,parameter2,param_value2'); document.forms['j_id0'].submit(); return false;"link with parameters></a>
Index: web/test/RenderResponse_correct
===================================================================
RCS file: /cvs/javaserverfaces-sources/jsf-ri/web/test/RenderResponse_correct,v
retrieving revision 1.141
diff -u -r1.141 RenderResponse_correct
--- web/test/RenderResponse_correct	25 Jul 2006 21:06:10 -0000	1.141
+++ web/test/RenderResponse_correct	27 Jul 2006 20:24:34 -0000
@@ -12,7 +12,7 @@
     <BODY>
         <H3> JSF Basic Components Test Page </H3>
 
-<form id="basicForm" name="basicForm" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=6eb2f7716564b81e4cc714767417" class="formClass" accept-charset="some-charset" accept="html,wml" enctype="application/x-www-form-urlencoded" target="_self" title="basicForm">
+<form id="basicForm" name="basicForm" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=1922045144df897ad5020a81132f" class="formClass" accept-charset="some-charset" accept="html,wml" enctype="application/x-www-form-urlencoded" target="_self" title="basicForm">
 
 
   <TABLE BORDER="1">
@@ -47,7 +47,7 @@
 
 	<TD>
 
-            <input id="basicForm:pushButton" type="image" src="duke.gif;jsessionid=6eb2f7716564b81e4cc714767417" name="basicForm:pushButton" style="someStyle" disabled="disabled" />
+            <input id="basicForm:pushButton" type="image" src="duke.gif;jsessionid=1922045144df897ad5020a81132f" name="basicForm:pushButton" style="someStyle" disabled="disabled" />
 	</TD>
 
       </TR>
@@ -57,7 +57,7 @@
 
 	<TD>
 
-            <input id="basicForm:imageOnlyButton" type="image" src="/test/duke.gif;jsessionid=6eb2f7716564b81e4cc714767417?title=LOGIN&color=red" name="basicForm:imageOnlyButton" />
+            <input id="basicForm:imageOnlyButton" type="image" src="/test/duke.gif;jsessionid=1922045144df897ad5020a81132f?title=LOGIN&color=red" name="basicForm:imageOnlyButton" />
 	</TD>
 
       </TR>
@@ -69,20 +69,29 @@
 	      
 <script type="text/javascript" language="Javascript">
 <!--
-    document.getElementById('basicForm').addParams = function(paramValuePairs) {
+for (var f = 0; f < document.forms.length; f++) {
+    var form = document.forms[f];
+    form.deleteParams = function() {
         var addedParams = this.addedParams;
         if (addedParams != null) {
             for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
+                this.removeChild(addedParams[i]);
             }
         }
-        addedParams = new Array();
+        this.addedParams = null;
+    }
+    var oldOnSubmit = form.onsubmit
+    if (oldOnSubmit == null) {
+        form.onsubmit = form.deleteParams
+    } else {
+        form.onsubmit = function() {
+            form.deleteParams();
+            oldOnSubmit();
+        }
+    }
+    form.addParams = function(paramValuePairs) {
+        this.deleteParams();
+        var addedParams = new Array();
         this.addedParams = addedParams;
         var params = paramValuePairs.split(',');
         for (var i = 0, ii = 0; i < params.length; i++, ii++) {
@@ -91,10 +100,11 @@
             param.name = params[i];
             param.value = params[i + 1];
             this.appendChild(param);
-            addedParams[ii] = params[i]
+            addedParams[ii] = param
             i = i + 1;
         }
     }
+}
 //-->
 </script>
 <a id="basicForm:link" href="#" onclick="document.forms['basicForm'].addParams('basicForm:link,basicForm:link'); document.forms['basicForm'].submit(); return false;" class="hyperlinkClass">link text with localized outputMessage with &euro;</a>
@@ -125,12 +135,12 @@
 
 	<TD>
 
-	      <a id="basicForm:imageLink" href="#" style="someStyle" onclick="document.forms['basicForm'].addParams('basicForm:imageLink,basicForm:imageLink'); document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=6eb2f7716564b81e4cc714767417?title=LOGIN&color=red" /></a>
+	      <a id="basicForm:imageLink" href="#" style="someStyle" onclick="document.forms['basicForm'].addParams('basicForm:imageLink,basicForm:imageLink'); document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=1922045144df897ad5020a81132f?title=LOGIN&color=red" /></a>
 
 	</TD>
 
         <TD> 
-            <img id="basicForm:graphicImage" src="/test/duke.gif;jsessionid=6eb2f7716564b81e4cc714767417" style="someStyle" usemap="#map1" ismap="ismap" /> 
+            <img id="basicForm:graphicImage" src="/test/duke.gif;jsessionid=1922045144df897ad5020a81132f" style="someStyle" usemap="#map1" ismap="ismap" /> 
         </TD>
 
       </TR>
@@ -155,7 +165,7 @@
 
       <TR>
         <TD>
-            <a id="basicForm:hrefParamLink" href="#" onclick="document.forms['basicForm'].addParams('basicForm:hrefParamLink,basicForm:hrefParamLink,name,horwat,value,password'); document.forms['basicForm'].target='_top'; document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=6eb2f7716564b81e4cc714767417" /></a>
+            <a id="basicForm:hrefParamLink" href="#" onclick="document.forms['basicForm'].addParams('basicForm:hrefParamLink,basicForm:hrefParamLink,name,horwat,value,password'); document.forms['basicForm'].target='_top'; document.forms['basicForm'].submit(); return false;"><img src="duke.gif;jsessionid=1922045144df897ad5020a81132f" /></a>
         </TD>
       </TR>
 
@@ -163,7 +173,7 @@
 
 	<TD>
 
-	      <a id="basicForm:outputLink" name="basicForm:outputLink" href="test.html;jsessionid=6eb2f7716564b81e4cc714767417" class="hyperlinkClass">output link text</a>
+	      <a id="basicForm:outputLink" name="basicForm:outputLink" href="test.html;jsessionid=1922045144df897ad5020a81132f" class="hyperlinkClass">output link text</a>
 
 	</TD>
 
@@ -173,37 +183,37 @@
 
 	<TD>
 
-	      <a id="basicForm:output_imageLink" name="basicForm:output_imageLink" href="test.html;jsessionid=6eb2f7716564b81e4cc714767417" style="position: absolute; left: 96px; top: 168px"><img src="duke.gif;jsessionid=6eb2f7716564b81e4cc714767417" /></a>
+	      <a id="basicForm:output_imageLink" name="basicForm:output_imageLink" href="test.html;jsessionid=1922045144df897ad5020a81132f" style="position: absolute; left: 96px; top: 168px"><img src="duke.gif;jsessionid=1922045144df897ad5020a81132f" /></a>
 
 	</TD>
 
         <TD> 
-            <img id="basicForm:output_graphicImage" src="/test/duke.gif;jsessionid=6eb2f7716564b81e4cc714767417" usemap="#map1" ismap="ismap" /> 
+            <img id="basicForm:output_graphicImage" src="/test/duke.gif;jsessionid=1922045144df897ad5020a81132f" usemap="#map1" ismap="ismap" /> 
         </TD>
 
       </TR>
 
       <TR>
         <TD>
-            <a id="basicForm:output_commandLink" name="basicForm:output_commandLink" href="test.html;jsessionid=6eb2f7716564b81e4cc714767417" style="position: absolute; left: 96px; top: 168px" class="hyperlinkClass">link text</a>
+            <a id="basicForm:output_commandLink" name="basicForm:output_commandLink" href="test.html;jsessionid=1922045144df897ad5020a81132f" style="position: absolute; left: 96px; top: 168px" class="hyperlinkClass">link text</a>
        </TD>
       </TR>
 
       <TR>
         <TD>
-            <a id="basicForm:output_commandParamLink" name="basicForm:output_commandParamLink" href="test.html;jsessionid=6eb2f7716564b81e4cc714767417?name=horwat&value=password" class="hyperlinkClass">link text</a>
+            <a id="basicForm:output_commandParamLink" name="basicForm:output_commandParamLink" href="test.html;jsessionid=1922045144df897ad5020a81132f?name=horwat&value=password" class="hyperlinkClass">link text</a>
         </TD>
       </TR>
 
       <TR>
         <TD>
-            <a id="basicForm:output_hrefLink" name="basicForm:output_hrefLink" href="test.html;jsessionid=6eb2f7716564b81e4cc714767417"><img src="duke.gif"></a>
+            <a id="basicForm:output_hrefLink" name="basicForm:output_hrefLink" href="test.html;jsessionid=1922045144df897ad5020a81132f"><img src="duke.gif"></a>
         </TD>
       </TR>
 
       <TR>
         <TD>
-            <a id="basicForm:output_hrefParamLink" name="basicForm:output_hrefParamLink" href="test.html;jsessionid=6eb2f7716564b81e4cc714767417?name=horwat&value=password"><img src="duke.gif;jsessionid=6eb2f7716564b81e4cc714767417" /></a>
+            <a id="basicForm:output_hrefParamLink" name="basicForm:output_hrefParamLink" href="test.html;jsessionid=1922045144df897ad5020a81132f?name=horwat&value=password"><img src="duke.gif;jsessionid=1922045144df897ad5020a81132f" /></a>
         </TD>
       </TR>
 
@@ -737,47 +747,16 @@
 
 </table>
 
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" /><input type="hidden" name="basicForm" value="basicForm" /></form><form id="form2" name="form2" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=6eb2f7716564b81e4cc714767417" enctype="application/x-www-form-urlencoded">
+<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" /><input type="hidden" name="basicForm" value="basicForm" /></form><form id="form2" name="form2" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=1922045144df897ad5020a81132f" enctype="application/x-www-form-urlencoded">
 <input type="submit" name="form2:j_id_id818" value="form2 button1" />
    <p />
   <input type="submit" name="form2:j_id_id821" value="form2 button2" /> <p />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" /><input type="hidden" name="form2" value="form2" /></form><form id="form3" name="form3" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=6eb2f7716564b81e4cc714767417" enctype="application/x-www-form-urlencoded">
+<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" /><input type="hidden" name="form2" value="form2" /></form><form id="form3" name="form3" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=1922045144df897ad5020a81132f" enctype="application/x-www-form-urlencoded">
 <input type="submit" name="form3:j_id_id827" value="form3 button1" />
    <p />
-  
-<script type="text/javascript" language="Javascript">
-<!--
-    document.getElementById('form3').addParams = function(paramValuePairs) {
-        var addedParams = this.addedParams;
-        if (addedParams != null) {
-            for (var i = 0; i < addedParams.length; i++) {
-                for (var p = 0; p < this.elements.length; p++) {
-                    var element = this.elements[p];
-                    if (addedParams[i] == elements[p].name) {
-                        this.removeChild(element);
-                        break;
-                    }
-                }
-            }
-        }
-        addedParams = new Array();
-        this.addedParams = addedParams;
-        var params = paramValuePairs.split(',');
-        for (var i = 0, ii = 0; i < params.length; i++, ii++) {
-            var param = document.createElement("input");
-            param.type = "hidden";
-            param.name = params[i];
-            param.value = params[i + 1];
-            this.appendChild(param);
-            addedParams[ii] = params[i]
-            i = i + 1;
-        }
-    }
-//-->
-</script>
-<a href="#" onclick="document.forms['form3'].addParams('form3:j_id_id830,form3:j_id_id830'); document.forms['form3'].submit(); return false;">form3 link1</a> <p />
-<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" /><input type="hidden" name="form3" value="form3" /></form><form id="form4" name="form4" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=6eb2f7716564b81e4cc714767417" enctype="application/x-www-form-urlencoded">
-<a href="http://localhost:8080/test/;jsessionid=6eb2f7716564b81e4cc714767417">
+  <a href="#" onclick="document.forms['form3'].addParams('form3:j_id_id830,form3:j_id_id830'); document.forms['form3'].submit(); return false;">form3 link1</a> <p />
+<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1:j_id2" /><input type="hidden" name="form3" value="form3" /></form><form id="form4" name="form4" method="post" action="/test/faces/TestRenderResponsePhase.jsp;jsessionid=1922045144df897ad5020a81132f" enctype="application/x-www-form-urlencoded">
+<a href="http://localhost:8080/test/;jsessionid=1922045144df897ad5020a81132f">
       Link Enabled
   </a><span>
       Link Disabled


SECTION: New Files
----------------------------
SEE ATTACHMENTS
