You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/06/06 04:15:05 UTC

svn commit: r951804 - in /myfaces/shared/trunk/core/src: main/java/org/apache/myfaces/shared/renderkit/html/ test/java/org/apache/myfaces/shared/renderkit/html/

Author: lu4242
Date: Sun Jun  6 02:15:04 2010
New Revision: 951804

URL: http://svn.apache.org/viewvc?rev=951804&view=rev
Log:
MYFACES-2743 Organize renderBehaviorizedXXX method parameters and add new ones

Modified:
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlBodyRendererBase.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
    myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtilsTest.java

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlBodyRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlBodyRendererBase.java?rev=951804&r1=951803&r2=951804&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlBodyRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlBodyRendererBase.java Sun Jun  6 02:15:04 2010
@@ -72,10 +72,10 @@ public class HtmlBodyRendererBase extend
             writer.startElement(HTML.BODY_ELEM, component);
             HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);            
             HtmlRendererUtils.renderBehaviorizedEventHandlers(facesContext, writer, component, behaviors);
-            HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, component, behaviors,
-                    ClientBehaviorEvents.LOAD, HTML.ONLOAD_ATTR, HTML.ONLOAD_ATTR);
-            HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, component, behaviors,
-                    ClientBehaviorEvents.UNLOAD, HTML.ONUNLOAD_ATTR, HTML.ONUNLOAD_ATTR);
+            HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, HTML.ONLOAD_ATTR, component,
+                    ClientBehaviorEvents.LOAD, behaviors, HTML.ONLOAD_ATTR);
+            HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, HTML.ONUNLOAD_ATTR, component,
+                    ClientBehaviorEvents.UNLOAD, behaviors, HTML.ONUNLOAD_ATTR);
             HtmlRendererUtils.renderHTMLAttributes(writer, component,
                     HTML.BODY_PASSTHROUGH_ATTRIBUTES_WITHOUT_EVENTS);
             

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java?rev=951804&r1=951803&r2=951804&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlButtonRendererBase.java Sun Jun  6 02:15:04 2010
@@ -19,6 +19,8 @@
 package org.apache.myfaces.shared.renderkit.html;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -27,6 +29,7 @@ import javax.faces.component.UIComponent
 import javax.faces.component.UIParameter;
 import javax.faces.component.ValueHolder;
 import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorContext;
 import javax.faces.component.behavior.ClientBehaviorHint;
 import javax.faces.component.behavior.ClientBehaviorHolder;
 import javax.faces.component.html.HtmlCommandButton;
@@ -185,10 +188,12 @@ public class HtmlButtonRendererBase
             }
             else
             {
-                String onClick = HtmlRendererUtils.buildBehaviorChain(facesContext, uiComponent, behaviors,
-                        ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, 
-                        commandOnclick , null,
+                Collection<ClientBehaviorContext.Parameter> paramList = HtmlRendererUtils.getClientBehaviorContextParameters(
                         HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, uiComponent));
+                    
+                String onClick = HtmlRendererUtils.buildBehaviorChain(facesContext, uiComponent,
+                        ClientBehaviorEvents.CLICK, paramList, ClientBehaviorEvents.ACTION, paramList, behaviors,
+                        commandOnclick , null);
                 if (onClick.length() != 0)
                 {
                     writer.writeAttribute(HTML.ONCLICK_ATTR, onClick.toString(), null);
@@ -198,8 +203,8 @@ public class HtmlButtonRendererBase
             Map<String, Object> attributes = uiComponent.getAttributes(); 
             
             HtmlRendererUtils.buildBehaviorChain(
-                    facesContext, uiComponent, behaviors, ClientBehaviorEvents.DBLCLICK,   
-                        (String) attributes.get(HTML.ONDBLCLICK_ATTR), "",null);
+                    facesContext, uiComponent, ClientBehaviorEvents.DBLCLICK, null, behaviors,   
+                        (String) attributes.get(HTML.ONDBLCLICK_ATTR), "");
             
             HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent,
                                                    HTML.BUTTON_PASSTHROUGH_ATTRIBUTES_WITHOUT_DISABLED_AND_EVENTS);            
@@ -322,11 +327,12 @@ public class HtmlButtonRendererBase
 
         //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,
-                ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, 
-                userOnClick.toString() , rendererOnClick.toString(),
+        Collection<ClientBehaviorContext.Parameter> paramList = HtmlRendererUtils.getClientBehaviorContextParameters(
                 HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, uiComponent));
-
+        
+        return HtmlRendererUtils.buildBehaviorChain(facesContext, uiComponent,
+                ClientBehaviorEvents.CLICK, paramList, ClientBehaviorEvents.ACTION, paramList, behaviors,
+                userOnClick.toString() , rendererOnClick.toString());
     }
     
     protected String buildServerOnclick(FacesContext facesContext, UIComponent component, 

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java?rev=951804&r1=951803&r2=951804&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlLinkRendererBase.java Sun Jun  6 02:15:04 2010
@@ -21,6 +21,7 @@ package org.apache.myfaces.shared.render
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -31,6 +32,7 @@ import javax.faces.component.UIOutcomeTa
 import javax.faces.component.UIOutput;
 import javax.faces.component.UIParameter;
 import javax.faces.component.behavior.ClientBehavior;
+import javax.faces.component.behavior.ClientBehaviorContext;
 import javax.faces.component.behavior.ClientBehaviorHint;
 import javax.faces.component.behavior.ClientBehaviorHolder;
 import javax.faces.component.html.HtmlCommandLink;
@@ -425,10 +427,12 @@ public abstract class HtmlLinkRendererBa
             }
             
             //render a javascript that chain the related code
-            onclick = HtmlRendererUtils.buildBehaviorChain(facesContext, component, behaviors,
-                    ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, 
-                    commandOnclick , hasSubmittingBehavior ? null : serverEventCode,
+            Collection<ClientBehaviorContext.Parameter> paramList = HtmlRendererUtils.getClientBehaviorContextParameters(
                     HtmlRendererUtils.mapAttachedParamsToStringValues(facesContext, component));
+            
+            onclick = HtmlRendererUtils.buildBehaviorChain(facesContext, component,
+                    ClientBehaviorEvents.CLICK, paramList, ClientBehaviorEvents.ACTION, paramList, behaviors,
+                    commandOnclick , hasSubmittingBehavior ? null : serverEventCode);
         }
         
         writer.startElement(HTML.ANCHOR_ELEM, component);

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java?rev=951804&r1=951803&r2=951804&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtils.java Sun Jun  6 02:15:04 2010
@@ -21,6 +21,7 @@ package org.apache.myfaces.shared.render
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -2059,6 +2060,23 @@ public final class HtmlRendererUtils {
         return (behaviors.get(eventName) != null);
     }
 
+    public static Collection<ClientBehaviorContext.Parameter> getClientBehaviorContextParameters(
+            Map<String, String> params)
+    {
+        List<ClientBehaviorContext.Parameter> paramList = null;
+        if (params != null)
+        {
+            paramList = new ArrayList<ClientBehaviorContext.Parameter>(
+                    params.size());
+            for (Map.Entry<String, String> paramEntry : params.entrySet())
+            {
+                paramList.add(new ClientBehaviorContext.Parameter(paramEntry
+                        .getKey(), paramEntry.getValue()));
+            }
+        }
+        return paramList;
+    }
+    
     /**
     * builds the chained behavior script which then can be reused
     * in following order by the other script building parts
@@ -2075,9 +2093,9 @@ public final class HtmlRendererUtils {
     * @return a string representation of the javascripts for the attached event behavior, an empty string if none is present
     */
     private static boolean getClientBehaviorScript(FacesContext facesContext,
-            UIComponent uiComponent,
+            UIComponent uiComponent,  String eventName,
             Map<String, List<ClientBehavior>> clientBehaviors,
-            ScriptContext target, String eventName, Map<String, String> params)
+            ScriptContext target, Collection<ClientBehaviorContext.Parameter> params)
     {
         if (!(uiComponent instanceof ClientBehaviorHolder))
         {
@@ -2105,22 +2123,10 @@ public final class HtmlRendererUtils {
             return false;
         }
 
-        List<ClientBehaviorContext.Parameter> paramList = null;
-        if (params != null)
-        {
-            paramList = new ArrayList<ClientBehaviorContext.Parameter>(
-                    params.size());
-            for (Map.Entry<String, String> paramEntry : params.entrySet())
-            {
-                paramList.add(new ClientBehaviorContext.Parameter(paramEntry
-                        .getKey(), paramEntry.getValue()));
-            }
-        }
-
         ClientBehaviorContext context = ClientBehaviorContext
                 .createClientBehaviorContext(facesContext, uiComponent,
                         eventName, uiComponent.getClientId(facesContext),
-                        paramList);
+                        params);
 
 
         boolean submitting = false;
@@ -2162,10 +2168,10 @@ public final class HtmlRendererUtils {
      * @return
      */
     public static String buildBehaviorChain(FacesContext facesContext,
-            UIComponent uiComponent, Map<String, List<ClientBehavior>> clientBehaviors,
-            String eventName,             
-            String userEventCode, String serverEventCode,
-            Map<String, String> params)
+            UIComponent uiComponent,
+            String eventName, Collection<ClientBehaviorContext.Parameter> params, 
+            Map<String, List<ClientBehavior>> clientBehaviors,
+            String userEventCode, String serverEventCode)
     {
         ExternalContext externalContext = facesContext.getExternalContext();
         boolean renderCode = JavascriptUtils
@@ -2187,8 +2193,8 @@ public final class HtmlRendererUtils {
         ScriptContext behaviorCode = new ScriptContext();
         ScriptContext retVal = new ScriptContext(currentInstance.isPrettyHtml());
 
-        getClientBehaviorScript(facesContext, uiComponent, clientBehaviors, 
-                behaviorCode, eventName, params);
+        getClientBehaviorScript(facesContext, uiComponent, eventName, clientBehaviors, 
+                behaviorCode, params);
         if (behaviorCode != null
                 && !behaviorCode.toString().trim().equals(STR_EMPTY))
         {
@@ -2237,9 +2243,11 @@ public final class HtmlRendererUtils {
      */
     public static String buildBehaviorChain(FacesContext facesContext,
             UIComponent uiComponent,
+            String eventName1, Collection<ClientBehaviorContext.Parameter> params,
+            String eventName2, Collection<ClientBehaviorContext.Parameter> params2,
             Map<String, List<ClientBehavior>> clientBehaviors,
-            String eventName1, String eventName2, String userEventCode,
-            String serverEventCode, Map<String, String> params)
+            String userEventCode,
+            String serverEventCode)
     {
         ExternalContext externalContext = facesContext.getExternalContext();
         boolean renderCode = JavascriptUtils
@@ -2259,10 +2267,10 @@ public final class HtmlRendererUtils {
         ScriptContext behaviorCode = new ScriptContext();
         ScriptContext retVal = new ScriptContext(currentInstance.isPrettyHtml());
 
-        boolean submitting1 = getClientBehaviorScript(facesContext, uiComponent, clientBehaviors,
-                behaviorCode, eventName1, params);
-        boolean submitting2 = getClientBehaviorScript(facesContext, uiComponent, clientBehaviors, 
-                behaviorCode, eventName2, params);
+        boolean submitting1 = getClientBehaviorScript(facesContext, uiComponent, eventName1, clientBehaviors,
+                behaviorCode, params);
+        boolean submitting2 = getClientBehaviorScript(facesContext, uiComponent, eventName2, clientBehaviors, 
+                behaviorCode, params2);
         
         // ClientBehaviors for both events have to be checked for the Submitting hint
         boolean submitting = submitting1 || submitting2;
@@ -2446,7 +2454,39 @@ public final class HtmlRendererUtils {
     }
     
     /**
-     * @since 4.0.0
+     * 
+     * Render an attribute taking into account the passed event and 
+     * the component property. It will be rendered as "componentProperty"
+     * attribute.
+     * 
+     * @since 4.0.1
+     * @param facesContext
+     * @param writer
+     * @param componentProperty
+     * @param component
+     * @param eventName
+     * @param clientBehaviors
+     * @return
+     * @throws IOException
+     */
+    public static boolean renderBehaviorizedAttribute(
+            FacesContext facesContext, ResponseWriter writer, 
+            String componentProperty, UIComponent component, 
+            String eventName, Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
+    {
+        return renderBehaviorizedAttribute(
+                facesContext, writer, 
+                componentProperty, component, 
+                eventName, clientBehaviors, componentProperty);
+    }
+
+    
+    /**
+     * Render an attribute taking into account the passed event and 
+     * the component property. The event will be rendered on the selected
+     * htmlAttrName 
+     * 
+     * @since 4.0.1
      * @param facesContext
      * @param writer
      * @param component
@@ -2458,35 +2498,187 @@ public final class HtmlRendererUtils {
      * @throws IOException
      */
     public static boolean renderBehaviorizedAttribute(
-            FacesContext facesContext, ResponseWriter writer,
-            UIComponent component, Map<String, List<ClientBehavior>> clientBehaviors, String eventName, String componentProperty, 
+            FacesContext facesContext, ResponseWriter writer, 
+            String componentProperty, UIComponent component, 
+            String eventName, Map<String, List<ClientBehavior>> clientBehaviors,   
             String htmlAttrName) throws IOException
     {
+        return renderBehaviorizedAttribute(facesContext, writer, 
+                componentProperty, component, 
+                eventName, null, clientBehaviors, 
+                htmlAttrName, (String) component.getAttributes().get(componentProperty));
+    }
+    
+    /**
+     * Render an attribute taking into account the passed event,  
+     * the component property and the passed attribute value for the component 
+     * property. The event will be rendered on the selected htmlAttrName.  
+     * 
+     * @param facesContext
+     * @param writer
+     * @param componentProperty
+     * @param component
+     * @param eventName
+     * @param clientBehaviors
+     * @param htmlAttrName
+     * @param attributeValue
+     * @return
+     * @throws IOException
+     */
+    public static boolean renderBehaviorizedAttribute(
+            FacesContext facesContext, ResponseWriter writer,
+            String componentProperty, UIComponent component,
+            String eventName, Collection<ClientBehaviorContext.Parameter> eventParameters, Map<String, List<ClientBehavior>> clientBehaviors,  
+            String htmlAttrName, String attributeValue) throws IOException
+    {
         List<ClientBehavior> cbl = (clientBehaviors != null) ? clientBehaviors.get(eventName) : null;
         
         if (cbl == null || cbl.size() == 0)
         {
-            return renderHTMLAttribute(writer, component, componentProperty, htmlAttrName);
+            return renderHTMLAttribute(writer, componentProperty, htmlAttrName, attributeValue);
         }
         
-        String attrValue = (String) component.getAttributes().get(componentProperty);
-        if (cbl.size() > 1 || (cbl.size() == 1 && attrValue != null) )
+        if (cbl.size() > 1 || (cbl.size() == 1 && attributeValue != null) )
         {
-            Object value = HtmlRendererUtils.buildBehaviorChain(facesContext,
-                    component, clientBehaviors, eventName, 
-                    attrValue, STR_EMPTY, null);
             return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
-                    value);
+                    HtmlRendererUtils.buildBehaviorChain(facesContext,
+                    component, eventName, eventParameters, clientBehaviors, 
+                    attributeValue, STR_EMPTY));
         }
         else
         {
             //Only 1 behavior and attrValue == null, so just render it directly
-            ClientBehaviorContext behaviorContext = ClientBehaviorContext
-                .createClientBehaviorContext(facesContext, component,
-                    eventName, component.getClientId(facesContext),
-                    null);
             return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
-                    cbl.get(0).getScript(behaviorContext));
+                    cbl.get(0).getScript(
+                            ClientBehaviorContext
+                            .createClientBehaviorContext(facesContext, component,
+                                    eventName, component.getClientId(facesContext),
+                                    eventParameters)));
+        }
+    }
+
+    /**
+     * Render an attribute taking into account the passed event,  
+     * the passed attribute value for the component property. 
+     * and the specific server code. 
+     * The event will be rendered on the selected htmlAttrName.
+     *    
+     * @param facesContext
+     * @param writer
+     * @param componentProperty
+     * @param component
+     * @param eventName
+     * @param clientBehaviors
+     * @param htmlAttrName
+     * @param attributeValue
+     * @param serverSideScript
+     * @return
+     * @throws IOException
+     */
+    public static boolean renderBehaviorizedAttribute(
+            FacesContext facesContext, ResponseWriter writer,
+            String componentProperty, UIComponent component,
+            String eventName, Collection<ClientBehaviorContext.Parameter> eventParameters, Map<String, List<ClientBehavior>> clientBehaviors,  
+            String htmlAttrName, String attributeValue, String serverSideScript) throws IOException
+    {
+        List<ClientBehavior> cbl = (clientBehaviors != null) ? clientBehaviors.get(eventName) : null;
+
+        if (((cbl != null) ? cbl.size() : 0) + (attributeValue != null ? 1 : 0) + (serverSideScript != null ? 1 : 0) <= 1)
+        {
+            if (cbl == null || cbl.size() == 0)
+            {
+                if (attributeValue != null)
+                {
+                    return renderHTMLAttribute(writer, componentProperty, htmlAttrName, attributeValue);
+                }
+                else
+                {
+                    return renderHTMLAttribute(writer, componentProperty, htmlAttrName, serverSideScript);
+                }
+            }else
+            {
+                return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
+                        cbl.get(0).getScript(
+                                ClientBehaviorContext
+                                .createClientBehaviorContext(facesContext, component,
+                                        eventName, component.getClientId(facesContext),
+                                        eventParameters)));
+            }
+        }
+        else
+        {
+            return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
+                    HtmlRendererUtils.buildBehaviorChain(facesContext,
+                    component, eventName, eventParameters, clientBehaviors, 
+                    attributeValue, serverSideScript));
+        }
+    }
+
+    /**
+     * 
+     * @param facesContext
+     * @param writer
+     * @param componentProperty
+     * @param component
+     * @param eventName
+     * @param eventParameters
+     * @param eventName2
+     * @param eventParameters2
+     * @param clientBehaviors
+     * @param htmlAttrName
+     * @param attributeValue
+     * @param serverSideScript
+     * @return
+     * @throws IOException
+     */
+    public static boolean renderBehaviorizedAttribute(
+            FacesContext facesContext, ResponseWriter writer,
+            String componentProperty, UIComponent component,
+            String eventName, Collection<ClientBehaviorContext.Parameter> eventParameters,
+            String eventName2, Collection<ClientBehaviorContext.Parameter> eventParameters2,
+            Map<String, List<ClientBehavior>> clientBehaviors,  
+            String htmlAttrName, String attributeValue, String serverSideScript) throws IOException
+    {
+        List<ClientBehavior> cb1 = (clientBehaviors != null) ? clientBehaviors.get(eventName) : null;
+        List<ClientBehavior> cb2 = (clientBehaviors != null) ? clientBehaviors.get(eventName2) : null;
+
+        if (((cb1 != null) ? cb1.size() : 0)+ ((cb2 != null) ? cb2.size() : 0) + (attributeValue != null ? 1 : 0) <= 1)
+        {
+            if (attributeValue != null)
+            {
+                return renderHTMLAttribute(writer, componentProperty, htmlAttrName, attributeValue);
+            }
+            else if (serverSideScript != null)
+            {
+                return renderHTMLAttribute(writer, componentProperty, htmlAttrName, serverSideScript);
+            }
+            else if (((cb1 != null) ? cb1.size() : 0) > 0)
+            {
+                return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
+                        cb1.get(0).getScript(
+                                ClientBehaviorContext
+                                .createClientBehaviorContext(facesContext, component,
+                                        eventName, component.getClientId(facesContext),
+                                        eventParameters)));
+            }
+            else
+            {
+                return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
+                        cb2.get(0).getScript(
+                                ClientBehaviorContext
+                                .createClientBehaviorContext(facesContext, component,
+                                        eventName2, component.getClientId(facesContext),
+                                        eventParameters2)));
+            }
+        }
+        else
+        {
+            return renderHTMLAttribute(writer, componentProperty, htmlAttrName,
+                    HtmlRendererUtils.buildBehaviorChain(
+                            facesContext, component,
+                            eventName, eventParameters,
+                            eventName2, eventParameters2,
+                            clientBehaviors, attributeValue, serverSideScript));
         }
     }
 
@@ -2502,26 +2694,26 @@ public final class HtmlRendererUtils {
             FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
             Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
     {
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.CLICK, HTML.ONCLICK_ATTR, HTML.ONCLICK_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.DBLCLICK, HTML.ONDBLCLICK_ATTR, HTML.ONDBLCLICK_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEDOWN, HTML.ONMOUSEDOWN_ATTR, HTML.ONMOUSEDOWN_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEUP, HTML.ONMOUSEUP_ATTR, HTML.ONMOUSEUP_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEOVER, HTML.ONMOUSEOVER_ATTR, HTML.ONMOUSEOVER_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEMOVE, HTML.ONMOUSEMOVE_ATTR, HTML.ONMOUSEMOVE_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEOUT, HTML.ONMOUSEOUT_ATTR, HTML.ONMOUSEOUT_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.KEYPRESS, HTML.ONKEYPRESS_ATTR, HTML.ONKEYPRESS_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.KEYDOWN, HTML.ONKEYDOWN_ATTR, HTML.ONKEYDOWN_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.KEYUP, HTML.ONKEYUP_ATTR, HTML.ONKEYUP_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONCLICK_ATTR, uiComponent, 
+                ClientBehaviorEvents.CLICK, clientBehaviors, HTML.ONCLICK_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONDBLCLICK_ATTR, uiComponent, 
+                ClientBehaviorEvents.DBLCLICK, clientBehaviors, HTML.ONDBLCLICK_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEDOWN_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEDOWN, clientBehaviors, HTML.ONMOUSEDOWN_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEUP_ATTR,  uiComponent,
+                ClientBehaviorEvents.MOUSEUP, clientBehaviors, HTML.ONMOUSEUP_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEOVER_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEOVER, clientBehaviors, HTML.ONMOUSEOVER_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEMOVE_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEMOVE, clientBehaviors, HTML.ONMOUSEMOVE_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEOUT_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEOUT, clientBehaviors, HTML.ONMOUSEOUT_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYPRESS_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYPRESS, clientBehaviors, HTML.ONKEYPRESS_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYDOWN_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYDOWN, clientBehaviors, HTML.ONKEYDOWN_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYUP_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYUP, clientBehaviors, HTML.ONKEYUP_ATTR);
     }
 
     /**
@@ -2536,24 +2728,46 @@ public final class HtmlRendererUtils {
             FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
             Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
     {
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.DBLCLICK, HTML.ONDBLCLICK_ATTR, HTML.ONDBLCLICK_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEDOWN, HTML.ONMOUSEDOWN_ATTR, HTML.ONMOUSEDOWN_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEUP, HTML.ONMOUSEUP_ATTR, HTML.ONMOUSEUP_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEOVER, HTML.ONMOUSEOVER_ATTR, HTML.ONMOUSEOVER_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEMOVE, HTML.ONMOUSEMOVE_ATTR, HTML.ONMOUSEMOVE_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.MOUSEOUT, HTML.ONMOUSEOUT_ATTR, HTML.ONMOUSEOUT_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.KEYPRESS, HTML.ONKEYPRESS_ATTR, HTML.ONKEYPRESS_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.KEYDOWN, HTML.ONKEYDOWN_ATTR, HTML.ONKEYDOWN_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.KEYUP, HTML.ONKEYUP_ATTR, HTML.ONKEYUP_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONDBLCLICK_ATTR, uiComponent,
+                ClientBehaviorEvents.DBLCLICK, clientBehaviors, HTML.ONDBLCLICK_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEDOWN_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEDOWN, clientBehaviors, HTML.ONMOUSEDOWN_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEUP_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEUP, clientBehaviors, HTML.ONMOUSEUP_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEOVER_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEOVER, clientBehaviors, HTML.ONMOUSEOVER_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEMOVE_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEMOVE, clientBehaviors, HTML.ONMOUSEMOVE_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEOUT_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEOUT, clientBehaviors, HTML.ONMOUSEOUT_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYPRESS_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYPRESS, clientBehaviors, HTML.ONKEYPRESS_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYDOWN_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYDOWN, clientBehaviors, HTML.ONKEYDOWN_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYUP_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYUP, clientBehaviors, HTML.ONKEYUP_ATTR);
+    }
+    
+    public static void renderBehaviorizedEventHandlersWithoutOnmouseoverAndOnmouseout(
+            FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
+            Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
+    {
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONCLICK_ATTR, uiComponent, 
+                ClientBehaviorEvents.CLICK, clientBehaviors, HTML.ONCLICK_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONDBLCLICK_ATTR, uiComponent, 
+                ClientBehaviorEvents.DBLCLICK, clientBehaviors, HTML.ONDBLCLICK_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEDOWN_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEDOWN, clientBehaviors, HTML.ONMOUSEDOWN_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEUP_ATTR,  uiComponent,
+                ClientBehaviorEvents.MOUSEUP, clientBehaviors, HTML.ONMOUSEUP_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONMOUSEMOVE_ATTR, uiComponent,
+                ClientBehaviorEvents.MOUSEMOVE, clientBehaviors, HTML.ONMOUSEMOVE_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYPRESS_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYPRESS, clientBehaviors, HTML.ONKEYPRESS_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYDOWN_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYDOWN, clientBehaviors, HTML.ONKEYDOWN_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONKEYUP_ATTR, uiComponent,
+                ClientBehaviorEvents.KEYUP, clientBehaviors, HTML.ONKEYUP_ATTR);
     }
     
     /**
@@ -2568,14 +2782,26 @@ public final class HtmlRendererUtils {
             FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
             Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
     {
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.FOCUS, HTML.ONFOCUS_ATTR, HTML.ONFOCUS_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.BLUR, HTML.ONBLUR_ATTR, HTML.ONBLUR_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.CHANGE, HTML.ONCHANGE_ATTR, HTML.ONCHANGE_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.SELECT, HTML.ONSELECT_ATTR, HTML.ONSELECT_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONFOCUS_ATTR, uiComponent,
+                ClientBehaviorEvents.FOCUS, clientBehaviors, HTML.ONFOCUS_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONBLUR_ATTR, uiComponent,
+                ClientBehaviorEvents.BLUR, clientBehaviors, HTML.ONBLUR_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONCHANGE_ATTR, uiComponent,
+                ClientBehaviorEvents.CHANGE, clientBehaviors, HTML.ONCHANGE_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer,  HTML.ONSELECT_ATTR, uiComponent,
+                ClientBehaviorEvents.SELECT, clientBehaviors, HTML.ONSELECT_ATTR);
+    }
+    
+    public static void renderBehaviorizedFieldEventHandlersWithoutOnfocus(
+            FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
+            Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
+    {
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONBLUR_ATTR, uiComponent,
+                ClientBehaviorEvents.BLUR, clientBehaviors, HTML.ONBLUR_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONCHANGE_ATTR, uiComponent,
+                ClientBehaviorEvents.CHANGE, clientBehaviors, HTML.ONCHANGE_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer,  HTML.ONSELECT_ATTR, uiComponent,
+                ClientBehaviorEvents.SELECT, clientBehaviors, HTML.ONSELECT_ATTR);
     }
     
     /**
@@ -2590,22 +2816,22 @@ public final class HtmlRendererUtils {
             FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
             Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
     {
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.FOCUS, HTML.ONFOCUS_ATTR, HTML.ONFOCUS_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.BLUR, HTML.ONBLUR_ATTR, HTML.ONBLUR_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.SELECT, HTML.ONSELECT_ATTR, HTML.ONSELECT_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONFOCUS_ATTR, uiComponent,
+                ClientBehaviorEvents.FOCUS, clientBehaviors, HTML.ONFOCUS_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONBLUR_ATTR, uiComponent,
+                ClientBehaviorEvents.BLUR, clientBehaviors, HTML.ONBLUR_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONSELECT_ATTR, uiComponent,
+                ClientBehaviorEvents.SELECT, clientBehaviors, HTML.ONSELECT_ATTR);
     }
     
     public static void renderBehaviorizedFieldEventHandlersWithoutOnchangeAndOnselect(
             FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
             Map<String, List<ClientBehavior>> clientBehaviors) throws IOException
     {    
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.FOCUS, HTML.ONFOCUS_ATTR, HTML.ONFOCUS_ATTR);
-        renderBehaviorizedAttribute(facesContext, writer, uiComponent, clientBehaviors,
-                ClientBehaviorEvents.BLUR, HTML.ONBLUR_ATTR, HTML.ONBLUR_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONFOCUS_ATTR, uiComponent,
+                ClientBehaviorEvents.FOCUS, clientBehaviors, HTML.ONFOCUS_ATTR);
+        renderBehaviorizedAttribute(facesContext, writer, HTML.ONBLUR_ATTR, uiComponent,
+                ClientBehaviorEvents.BLUR, clientBehaviors, HTML.ONBLUR_ATTR);
     }
     
     /**
@@ -2627,20 +2853,20 @@ public final class HtmlRendererUtils {
         if (hasChange && hasValueChange)
         {
             String chain = HtmlRendererUtils.buildBehaviorChain(facesContext,
-                    uiComponent, clientBehaviors, ClientBehaviorEvents.CHANGE, ClientBehaviorEvents.VALUECHANGE, 
-                    (String) uiComponent.getAttributes().get(HTML.ONCHANGE_ATTR), null, null);
+                    uiComponent, ClientBehaviorEvents.CHANGE, null, ClientBehaviorEvents.VALUECHANGE, null, clientBehaviors, 
+                    (String) uiComponent.getAttributes().get(HTML.ONCHANGE_ATTR), null);
             
             return HtmlRendererUtils.renderHTMLAttribute(writer, HTML.ONCHANGE_ATTR, HTML.ONCHANGE_ATTR, chain);
         }
         else if (hasChange)
         {
-            return HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, uiComponent, 
-                    clientBehaviors, ClientBehaviorEvents.CHANGE, HTML.ONCHANGE_ATTR, HTML.ONCHANGE_ATTR);                
+            return HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, HTML.ONCHANGE_ATTR, uiComponent, 
+                    ClientBehaviorEvents.CHANGE, clientBehaviors, HTML.ONCHANGE_ATTR);                
         }
         else if (hasValueChange)
         {
-            return HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, uiComponent, 
-                    clientBehaviors, ClientBehaviorEvents.VALUECHANGE, HTML.ONCHANGE_ATTR, HTML.ONCHANGE_ATTR);
+            return HtmlRendererUtils.renderBehaviorizedAttribute(facesContext, writer, HTML.ONCHANGE_ATTR, uiComponent, 
+                    ClientBehaviorEvents.VALUECHANGE, clientBehaviors, HTML.ONCHANGE_ATTR);
         }
         else
         {

Modified: myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtilsTest.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtilsTest.java?rev=951804&r1=951803&r2=951804&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtilsTest.java (original)
+++ myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/html/HtmlRendererUtilsTest.java Sun Jun  6 02:15:04 2010
@@ -40,16 +40,18 @@ public class HtmlRendererUtilsTest exten
     {
         Map<String, List<ClientBehavior>> behaviors = new HashMap<String, List<ClientBehavior>>();
 
-        Map<String, String> params = new HashMap<String, String>();
+        //Map<String, String> params = new HashMap<String, String>();
+        Collection<ClientBehaviorContext.Parameter> params = new ArrayList<ClientBehaviorContext.Parameter>();
+        
         UIComponent component = new HtmlInputText();
-        Assert.assertEquals("", HtmlRendererUtils.buildBehaviorChain(facesContext, component, behaviors,
-                ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, null,
-                null, params));
+        Assert.assertEquals("", HtmlRendererUtils.buildBehaviorChain(facesContext, component,
+                ClientBehaviorEvents.CLICK, params, ClientBehaviorEvents.ACTION, params, behaviors, null,
+                null));
 
         Assert.assertEquals("return jsf.util.chain(document.getElementById('j_id0'), event,'huhn', 'suppe');",
                 HtmlRendererUtils.buildBehaviorChain(facesContext,
-                        component, behaviors, ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, "huhn",
-                        "suppe", params));
+                        component, ClientBehaviorEvents.CLICK, params, ClientBehaviorEvents.ACTION, params, behaviors, "huhn",
+                        "suppe"));
 
         ClientBehavior submittingBehavior = new ClientBehaviorBase()
         {
@@ -70,9 +72,9 @@ public class HtmlRendererUtilsTest exten
 
         Assert.assertEquals("jsf.util.chain(document.getElementById('j_id0'), event,'huhn', 'script()', 'suppe'); return false;",
                 HtmlRendererUtils.buildBehaviorChain(facesContext,
-                        component, behaviors,
-                        ClientBehaviorEvents.CLICK, ClientBehaviorEvents.ACTION, "huhn",
-                        "suppe", params));
+                        component,
+                        ClientBehaviorEvents.CLICK, params, ClientBehaviorEvents.ACTION, params, behaviors, "huhn",
+                        "suppe"));
 
     }
 }
\ No newline at end of file