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

[myfaces] branch 2.3.x updated: https://issues.apache.org/jira/browse/MYFACES-4040: (#426)

This is an automated email from the ASF dual-hosted git repository.

werpu pushed a commit to branch 2.3.x
in repository https://gitbox.apache.org/repos/asf/myfaces.git


The following commit(s) were added to refs/heads/2.3.x by this push:
     new b9c8b8996 https://issues.apache.org/jira/browse/MYFACES-4040:  (#426)
b9c8b8996 is described below

commit b9c8b8996b69dfc00ee95a9f1f009c37bd236d15
Author: Werner Punz <we...@apache.org>
AuthorDate: Tue Dec 20 17:04:44 2022 +0100

    https://issues.apache.org/jira/browse/MYFACES-4040:  (#426)
    
    
    * https://issues.apache.org/jira/browse/MYFACES-4040: fixing/adapting test
    according to the new structure
    Added renderer fixes
---
 .../renderkit/html/HtmlAjaxBehaviorRenderer.java   | 62 +++++++++++++++++-----
 .../tag/jsf/html/DefaultHtmlDecoratorTestCase.java |  2 +-
 .../apache/myfaces/shared/util/StringUtils.java    | 37 +++++++++++++
 3 files changed, 86 insertions(+), 15 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java
index 355674ce6..74017d9c0 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlAjaxBehaviorRenderer.java
@@ -41,6 +41,7 @@ import javax.faces.event.AjaxBehaviorEvent;
 import javax.faces.event.PhaseId;
 import javax.faces.render.ClientBehaviorRenderer;
 import org.apache.myfaces.shared.renderkit.html.util.SharedStringBuilder;
+import org.apache.myfaces.shared.util.StringUtils;
 
 /**
  * @author Werner Punz  (latest modification by $Author$)
@@ -73,6 +74,9 @@ public class HtmlAjaxBehaviorRenderer extends ClientBehaviorRenderer
 
     private static final String AJAX_SB = "oam.renderkit.AJAX_SB";
     private static final String AJAX_PARAM_SB = "oam.renderkit.AJAX_PARAM_SB";
+    public static final char L_C_BR = '{';
+    public static final char R_C_BR = '}';
+    public static final String AJAX_KEY_PARAMS = "params";
 
     @Override
     public void decode(FacesContext context, UIComponent component, ClientBehavior behavior)
@@ -276,6 +280,7 @@ public class HtmlAjaxBehaviorRenderer extends ClientBehaviorRenderer
         int paramSize = (params != null) ? params.size() : 0;
 
         List<String> parameterList = new ArrayList<>(paramSize + 2);
+        List<String> requestParameterList = new ArrayList<>(paramSize + 2);
         if (executes != null)
         {
             parameterList.add(executes);
@@ -320,14 +325,14 @@ public class HtmlAjaxBehaviorRenderer extends ClientBehaviorRenderer
                 for (int i = 0, size = list.size(); i < size; i++)
                 {
                     ClientBehaviorContext.Parameter param = list.get(i);
-                    append(paramBuffer, parameterList, param);
+                    append(paramBuffer, requestParameterList, param);
                 }
             }
             else
             {
                 for (ClientBehaviorContext.Parameter param : params)
                 {
-                    append(paramBuffer, parameterList, param);
+                    append(paramBuffer, requestParameterList, param);
                 }
             }
         }
@@ -341,14 +346,14 @@ public class HtmlAjaxBehaviorRenderer extends ClientBehaviorRenderer
         paramBuffer.append(QUOTE);
         paramBuffer.append(event);
         paramBuffer.append(QUOTE);
-        parameterList.add(paramBuffer.toString());
+        requestParameterList.add(paramBuffer.toString());
 
         /**
          * I assume here for now that the options are the same which also
          * can be sent via the options attribute to javax.faces.ajax
          * this still needs further clarifications but I assume so for now
          */
-        retVal.append(buildOptions(paramBuffer, parameterList));
+        retVal.append(buildOptions(paramBuffer, parameterList, requestParameterList));
 
         retVal.append(R_PAREN);
 
@@ -374,11 +379,11 @@ public class HtmlAjaxBehaviorRenderer extends ClientBehaviorRenderer
     }
 
 
-    private StringBuilder buildOptions(StringBuilder retVal, List<String> options)
+    private StringBuilder buildOptions(StringBuilder retVal, List<String> options, List<String> requestParameterList)
     {
         retVal.setLength(0);
 
-        retVal.append("{");
+        retVal.append(L_C_BR);
 
         boolean first = true;
 
@@ -387,21 +392,50 @@ public class HtmlAjaxBehaviorRenderer extends ClientBehaviorRenderer
             String option = options.get(i);
             if (option != null && !option.trim().equals(EMPTY))
             {
-                if (!first)
-                {
-                    retVal.append(COMMA);
-                }
-                else
+                first = appendComma(retVal, first);
+                retVal.append(option);
+            }
+        }
+
+        int requestParamSize = requestParameterList.size();
+        if(requestParamSize > 0)
+        {
+            appendComma(retVal, first);
+            retVal.append(AJAX_KEY_PARAMS);
+            retVal.append(COLON);
+            retVal.append(L_C_BR);
+            first = true;
+            for (int i = 0; i < requestParamSize; i++)
+            {
+                String requestParam = requestParameterList.get(i);
+                if (!StringUtils.isBlank(requestParam))
                 {
-                    first = false;
+                    first = appendComma(retVal, first);
+                    retVal.append(requestParam);
                 }
-                retVal.append(option);
             }
+            retVal.append(R_C_BR);
+
         }
-        retVal.append("}");
+
+
+        retVal.append(R_C_BR);
         return retVal;
     }
 
+    private boolean appendComma(StringBuilder retVal, boolean first)
+    {
+        if (!first)
+        {
+            retVal.append(COMMA);
+        }
+        else
+        {
+            first = false;
+        }
+        return first;
+    }
+
     private String mapToString(ClientBehaviorContext context, StringBuilder retVal,
             String target, Collection<String> dataHolder)
     {
diff --git a/impl/src/test/java/org/apache/myfaces/view/facelets/tag/jsf/html/DefaultHtmlDecoratorTestCase.java b/impl/src/test/java/org/apache/myfaces/view/facelets/tag/jsf/html/DefaultHtmlDecoratorTestCase.java
index 807536e02..5d496706f 100644
--- a/impl/src/test/java/org/apache/myfaces/view/facelets/tag/jsf/html/DefaultHtmlDecoratorTestCase.java
+++ b/impl/src/test/java/org/apache/myfaces/view/facelets/tag/jsf/html/DefaultHtmlDecoratorTestCase.java
@@ -586,7 +586,7 @@ public class DefaultHtmlDecoratorTestCase extends FaceletTestCase
             new HtmlRenderedAttr("onclick", 
                     "jsf.util.chain(this, event,'alert(\\'hello\\')', "
                     + "'jsf.ajax.request(this,event,{render:\\'myForm:box5 \\',"
-                            + "\\'javax.faces.behavior.event\\':\\'click\\'})');"),
+                            + "params:{\\'javax.faces.behavior.event\\':\\'click\\'}})');"),
         };
         
         HtmlCheckAttributesUtil.checkRenderedAttributes(attrs, sw.toString());
diff --git a/shared-public/src/main/java/org/apache/myfaces/shared/util/StringUtils.java b/shared-public/src/main/java/org/apache/myfaces/shared/util/StringUtils.java
index ba74d7579..0a7f24f82 100755
--- a/shared-public/src/main/java/org/apache/myfaces/shared/util/StringUtils.java
+++ b/shared-public/src/main/java/org/apache/myfaces/shared/util/StringUtils.java
@@ -38,6 +38,43 @@ public final class StringUtils
 
     //~ Methods ------------------------------------------------------------------------------------
 
+    public static boolean isEmpty(String value)
+    {
+        return value == null || value.isEmpty();
+    }
+
+    public static boolean isBlank(String str)
+    {
+        if (str == null)
+        {
+            return true;
+        }
+        int strLen = str.length();
+        if (strLen == 0)
+        {
+            return true;
+        }
+
+        for (int i = 0; i < strLen; i++)
+        {
+            if (!Character.isWhitespace(str.charAt(i)))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public static boolean isNotEmpty(String value)
+    {
+        return !isEmpty(value);
+    }
+
+    public static boolean isNotBlank(String value)
+    {
+        return !isBlank(value);
+    }
+
     /**
      * Checks that the string represents a floating point number that CANNOT be
      * in exponential notation