You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by cj...@apache.org on 2009/12/10 16:19:20 UTC

svn commit: r889289 - in /myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html: HtmlButtonRendererBase.java HtmlRendererUtils.java

Author: cjhoward
Date: Thu Dec 10 15:19:19 2009
New Revision: 889289

URL: http://svn.apache.org/viewvc?rev=889289&view=rev
Log:
MYFACES-2458 - Make sure AJAX call isn't emitted when <f:ajax disabled="true" />.

Modified:
    myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
    myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java

Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java?rev=889289&r1=889288&r2=889289&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java Thu Dec 10 15:19:19 2009
@@ -265,11 +265,16 @@
 
         //according to the specification in jsf.util.chain jdocs and the spec document we have to use
         //jsf.util.chain to chain the functions and
-        return HtmlRendererUtils.buildBehaviorChain(facesContext, uiComponent, behaviors,
+        String behaviorChain = HtmlRendererUtils.buildBehaviorChain(facesContext, uiComponent, behaviors,
                 ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, 
                 userOnClick.toString() , rendererOnClick.toString(),
-                HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, uiComponent)) + "return false;";
-
+                HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, uiComponent));
+        
+        if ((behaviorChain != null) && !behaviorChain.equals ("")) {
+            behaviorChain += "return false;";
+        }
+        
+        return behaviorChain;
     }
 
     protected StringBuffer buildOnClick(UIComponent uiComponent, FacesContext facesContext, 

Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java?rev=889289&r1=889288&r2=889289&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java Thu Dec 10 15:19:19 2009
@@ -2093,14 +2093,18 @@
                 .iterator();
         while (clientIterator.hasNext())
         {
-
-            //either strings or functions, but I assume string is more appropriate since it allows access to the
-            //origin as this!
-            target.append("'"
-                    + StringUtils.replace(clientIterator.next().getScript(context), '\'', "\\'") + "'");
-            if (clientIterator.hasNext())
-            {
-                target.append(", ");
+            String script = clientIterator.next().getScript (context);
+            
+            // The script _can_ be null, and in fact is for <f:ajax disabled="true" />
+            
+            if (script != null) {
+                //either strings or functions, but I assume string is more appropriate since it allows access to the
+                //origin as this!
+                target.append("'" + StringUtils.replace(script, '\'', "\\'") + "'");
+                if (clientIterator.hasNext())
+                {
+                    target.append(", ");
+                }
             }
         }
 
@@ -2155,19 +2159,25 @@
             finalParams.add('\''+serverEventCode+'\'');
         }
         Iterator<String> it = finalParams.iterator();
-
-        //according to the spec jsf.util.chain has to be used to build up the behavior and scripts
-        retVal.append("jsf.util.chain(document.getElementById('"
-                + uiComponent.getClientId(facesContext) + "'), event,");
-        while (it.hasNext())
-        {
-            retVal.append(it.next());
-            if(it.hasNext())
+        
+        // It's possible that there are no behaviors to render.  For example, if we have
+        // <f:ajax disabled="true" /> as the only behavior.
+        
+        if (it.hasNext()) {
+            //according to the spec jsf.util.chain has to be used to build up the behavior and scripts
+            retVal.append("jsf.util.chain(document.getElementById('"
+                    + uiComponent.getClientId(facesContext) + "'), event,");
+            while (it.hasNext())
             {
-                retVal.append(", ");
+                retVal.append(it.next());
+                if(it.hasNext())
+                {
+                    retVal.append(", ");
+                }
             }
+            retVal.append(");");
         }
-        retVal.append(");");
+        
         return retVal.toString();
 
     }
@@ -2225,18 +2235,24 @@
         }
         Iterator<String> it = finalParams.iterator();
 
-        //according to the spec jsf.util.chain has to be used to build up the behavior and scripts
-        retVal.append("jsf.util.chain(document.getElementById('"
-                + uiComponent.getClientId(facesContext) + "'), event,");
-        while (it.hasNext())
-        {
-            retVal.append(it.next());
-            if (it.hasNext())
+        // It's possible that there are no behaviors to render.  For example, if we have
+        // <f:ajax disabled="true" /> as the only behavior.
+        
+        if (it.hasNext()) {
+            //according to the spec jsf.util.chain has to be used to build up the behavior and scripts
+            retVal.append("jsf.util.chain(document.getElementById('"
+                    + uiComponent.getClientId(facesContext) + "'), event,");
+            while (it.hasNext())
             {
-                retVal.append(", ");
+                retVal.append(it.next());
+                if (it.hasNext())
+                {
+                    retVal.append(", ");
+                }
             }
+            retVal.append(");");
         }
-        retVal.append(");");
+        
         return retVal.toString();
 
     }