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