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

mridulpathak pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit ddccb6d363ec70259b3e584690a4722054d20bd7
Author: Mridul Pathak <[email protected]>
AuthorDate: Sun Oct 18 22:39:10 2026 +0530

    Fixed: Build the sort links of list forms with an encoded query string
    
    The sort links of list forms URL-encoded their whole query string and 
appended it to the request path, and FindGeneric turned that encoding off with 
the escapeUrlEncode context flag because it broke its sort links, so its sort 
links carried the request parameters unencoded. The sort link is now built like 
the pagination links, with a regular query string whose parameter names and 
values are URL-encoded. The escapeUrlEncode flag and 
UtilCodec.encodeUrl(String, Map) are removed.
---
 .../main/java/org/apache/ofbiz/base/util/UtilCodec.java | 13 -------------
 .../org/apache/ofbiz/webtools/entity/FindGeneric.groovy |  4 ----
 .../ofbiz/widget/renderer/macro/MacroFormRenderer.java  | 17 +----------------
 .../widget/renderer/macro/MacroFormRendererTest.java    |  3 ++-
 4 files changed, 3 insertions(+), 34 deletions(-)

diff --git 
a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilCodec.java 
b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilCodec.java
index 2f37c0ddeb..6475906032 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilCodec.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilCodec.java
@@ -402,19 +402,6 @@ public class UtilCodec {
         return getEncoder("url").encode(queryString);
     }
 
-    /**
-     * Check if an escapeUrlEncode is present in the context, to escape url 
encoding in a specific case
-     * This is necessary if the url is sent to another encoding tool.
-     * @param queryString
-     * @param context
-     * @return encoding url with OFBiz rule
-     */
-    public static String encodeUrl(String queryString, Map<String, Object> 
context) {
-        return "true".equalsIgnoreCase((String) context.get("escapeUrlEncode"))
-                ? queryString
-                : encodeUrl(queryString);
-    }
-
     /**
      * Uses a black-list approach for necessary characters for HTML.
      * Does not allow various characters (after canonicalization), including
diff --git 
a/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy
 
b/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy
index f96e4f3a91..5103a0b204 100644
--- 
a/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy
+++ 
b/framework/webtools/src/main/groovy/org/apache/ofbiz/webtools/entity/FindGeneric.groovy
@@ -33,10 +33,6 @@ import org.w3c.dom.Document
 
 ModelEntity modelEntity = null
 
-// escape the security url encoding that break the sortField with the ftl 
rendering
-// no security issue here, nothing come from the request
-context.escapeUrlEncode = 'true'
-
 try {
     modelEntity = delegator.getModelEntity(parameters.entityName)
 } catch (GenericEntityException e) {
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
index b79ab21049..fafbd32e8e 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
@@ -733,23 +733,8 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
         if (ajaxEnabled) {
             linkUrl = 
MacroCommonRenderer.createAjaxParamsFromUpdateAreas(updateAreas, paramMap, 
modelForm, null, context);
         } else {
-            StringBuilder sb = new StringBuilder("?");
-            Iterator<Map.Entry<String, Object>> iter = 
paramMap.entrySet().iterator();
-            while (iter.hasNext()) {
-                Map.Entry<String, Object> entry = iter.next();
-                sb.append(entry.getKey()).append("=").append(entry.getValue());
-                if (iter.hasNext()) {
-                    sb.append("&amp;");
-                }
-            }
-            String newQueryString = sb.toString();
             String urlPath = 
UtilHttp.removeQueryStringFromTarget(paginateTarget);
-            if (newQueryString.contains("?null=")) { // FIXME, not sure how to 
handle URL encoding in tests
-                newQueryString = 
newQueryString.replace("?null=LinkFromQBEString", 
"?sortField=LinkFromQBEString");
-                linkUrl = rh.makeLink(this.request, this.response, 
urlPath.concat(newQueryString));
-            } else {
-                linkUrl = rh.makeLink(this.request, this.response, 
urlPath.concat(UtilCodec.encodeUrl(newQueryString, context)));
-            }
+            linkUrl = rh.makeLink(this.request, this.response, urlPath + "?" + 
UtilHttp.urlEncodeArgs(paramMap));
         }
         String tooltip = modelFormField.getSortFieldHelpText(context);
         writeFtlElement(writer, 
renderableFtlFormElementsBuilder.sortField(sortFieldStyle, titleText, linkUrl, 
ajaxEnabled, tooltip));
diff --git 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
index 911992ff25..12608166e1 100644
--- 
a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
+++ 
b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
@@ -646,11 +646,12 @@ public final class MacroFormRendererTest {
         final ModelForm modelForm = mock(ModelForm.class);
         final String paginateTarget = "TARGET";
         final String qbeString = "field2=value2 with spaces";
+        final String encodedQbeString = "field2=value2+with+spaces";
         final String linkFromQbeString = "LinkFromQBEString";
 
         when(modelFormField.getModelForm()).thenReturn(modelForm);
         
when(modelForm.getPaginateTarget(notNull())).thenReturn(paginateTarget);
-        when(requestHandler.makeLink(notNull(), notNull(), 
contains(qbeString))).thenReturn(linkFromQbeString);
+        when(requestHandler.makeLink(notNull(), notNull(), 
contains(encodedQbeString))).thenReturn(linkFromQbeString);
         
when(modelFormField.getSortFieldHelpText(notNull())).thenReturn("HELPTEXT");
         
when(renderableFtlFormElementsBuilder.sortField(nullable(String.class), eq(""), 
eq(linkFromQbeString), eq(false),
                 eq("HELPTEXT"))).thenReturn(genericMacroCall);

Reply via email to