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

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


The following commit(s) were added to refs/heads/release24.09 by this push:
     new 85d0e5c8cc Improve parameter handling and JSON construction in form 
renderer and related macros (#982)
85d0e5c8cc is described below

commit 85d0e5c8ccd6232afc3061c5f1ec134630536906
Author: Ashish Vijaywargiya <[email protected]>
AuthorDate: Fri Mar 13 19:13:25 2026 +0530

    Improve parameter handling and JSON construction in form renderer and 
related macros (#982)
    
    Improved: Improve parameter handling and JSON construction in form
    renderer and related macros
    
    (cherry picked from commit d4422b0f9816b31be0c07ccfdb8c7a375dd1596c)
---
 .../widget/renderer/macro/MacroFormRenderer.java   | 24 +++++++++++-----------
 .../renderer/macro/MacroFormRendererTest.java      |  2 +-
 .../template/macro/HtmlFormMacroLibrary.ftl        | 11 +---------
 3 files changed, 14 insertions(+), 23 deletions(-)

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 608ff841a4..ce6ca15a5b 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
@@ -2347,19 +2347,19 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
                 height = request.getAttribute("height").toString();
             }
             StringBuilder targetParameters = new StringBuilder();
-            if (UtilValidate.isNotEmpty(parameterMap)) {
-                targetParameters.append("{");
-                for (Map.Entry<String, String> parameter : 
parameterMap.entrySet()) {
-                    if (targetParameters.length() > 1) {
-                        targetParameters.append(",");
+            if (UtilValidate.isNotEmpty(parameterMap) || 
UtilValidate.isNotEmpty(uniqueItemName)) {
+                try {
+                    Map<String, Object> params = new java.util.TreeMap<>();
+                    if (UtilValidate.isNotEmpty(parameterMap)) {
+                        params.putAll(parameterMap);
                     }
-                    targetParameters.append("'");
-                    targetParameters.append(parameter.getKey());
-                    targetParameters.append("':'");
-                    targetParameters.append(parameter.getValue());
-                    targetParameters.append("'");
+                    if (UtilValidate.isNotEmpty(uniqueItemName)) {
+                        params.put("presentation", "layer");
+                    }
+                    
targetParameters.append(org.apache.ofbiz.base.lang.JSON.from(params).toString());
+                } catch (Exception e) {
+                    Debug.logError(e, "Error converting dialog params to 
JSON", MODULE);
                 }
-                targetParameters.append("}");
             }
             StringWriter sr = new StringWriter();
             sr.append("<@makeHyperlinkString ");
@@ -2380,7 +2380,7 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
             sr.append("\" alternate=\"");
             sr.append(alt);
             sr.append("\" targetParameters=\"");
-            sr.append(targetParameters.toString());
+            sr.append(encodeDoubleQuotes(targetParameters.toString()));
             sr.append("\" linkUrl=\"");
             sr.append(linkUrl.toString());
             sr.append("\" targetWindow=\"");
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 3964d961ce..6c767af158 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
@@ -962,7 +962,7 @@ public class MacroFormRendererTest {
                 .put("description", description)
                 .put("linkUrl", "Encoded%20Target")
                 .put("id", id)
-                .put("targetParameters", "{'k1':'v1','k2':'v2'}")
+                .put("targetParameters", 
"{\\\"k1\\\":\\\"v1\\\",\\\"k2\\\":\\\"v2\\\",\\\"presentation\\\":\\\"layer\\\"}")
                 .put("width", width)
                 .put("confirmation", confirmation)
                 .put("targetWindow", targetWindow)
diff --git a/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl 
b/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
index 8acb39b025..09540394ef 100644
--- a/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
+++ b/themes/common-theme/template/macro/HtmlFormMacroLibrary.ftl
@@ -839,17 +839,8 @@ Parameter: delegatorName, String, optional - name of the 
delegator in context.
 </#macro>
 <#macro makeHyperlinkString hiddenFormName imgSrc imgTitle title alternate 
linkUrl description text="" linkStyle="" event="" action="" targetParameters="" 
targetWindow="" confirmation="" uniqueItemName="" height="" width="" id="">
     <#if uniqueItemName?has_content>
-        <#local params = "{&quot;presentation&quot;: &quot;layer&quot;">
-        <#if targetParameters?has_content && !targetParameters?is_hash>
-          <#local parameterMap = targetParameters?eval>
-          <#local parameterKeys = parameterMap?keys>
-          <#list parameterKeys as key>
-            <#local params += ",&quot;${key}&quot;: 
&quot;${parameterMap[key]}&quot;">
-          </#list>
-        </#if>
-        <#local params += "}">
         <a href="javascript:void(0);" id="${uniqueItemName}_link"
-           data-dialog-params="${params}"
+           data-dialog-params="${targetParameters?html}"
            data-dialog-width="${width}"
            data-dialog-height="${height}"
            data-dialog-url="${linkUrl}"

Reply via email to