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

mridulpathak 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 38c3a221fa Fixed: Do not evaluate the area id and target of the Ajax 
update areas of forms twice as an expression (OFBIZ-13643)
38c3a221fa is described below

commit 38c3a221fa0c21f65c80e4a1bf06accbfcad056d
Author: Mridul Pathak <[email protected]>
AuthorDate: Sun Oct 4 13:01:18 2026 +0530

    Fixed: Do not evaluate the area id and target of the Ajax update areas of 
forms twice as an expression (OFBIZ-13643)
    
    MacroFormRenderer and MacroCommonRenderer created ModelForm.UpdateArea 
objects with the String constructor from values that were already evaluated, 
such as the form id, the background submit refresh target, the target of the 
lookup auto-completer and the target window and target of a link. That 
constructor takes widget expressions, so the area id and the target were 
evaluated a second time when the Ajax parameters were created, and a value that 
comes from the request and contains an e [...]
    
    These update areas are now created with UpdateArea.literal, which takes the 
area id and the target as they are, and a variant of it without parameters was 
added for them. The update areas defined in the widgets are evaluated as before.
    
    (cherry picked from commit 02102379b6628ad4a2e8bf50a2e57c5f9bb6e760)
---
 .../src/main/java/org/apache/ofbiz/widget/model/ModelForm.java | 10 ++++++++++
 .../ofbiz/widget/renderer/macro/MacroCommonRenderer.java       |  2 +-
 .../apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java  |  4 ++--
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
index 9107449102..876a349a26 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
@@ -2393,6 +2393,16 @@ public abstract class ModelForm extends ModelWidget {
             return new UpdateArea(eventType, areaId, areaTarget, 
parameterList, true);
         }
 
+        /** Creates an update area without parameters whose area id and target 
are already evaluated values, so that they
+         * are taken literally and never evaluated as an expression.
+         * @param areaId The evaluated id of the widget element to be updated
+         * @param areaTarget The evaluated target URL called to update the area
+         * @return the update area
+         */
+        public static UpdateArea literal(String eventType, String areaId, 
String areaTarget) {
+            return new UpdateArea(eventType, areaId, areaTarget, 
Collections.emptyList(), true);
+        }
+
         @Override
         public boolean equals(Object obj) {
             return obj instanceof UpdateArea && obj.hashCode() == 
this.hashCode();
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
index 857d0b2de1..0fc9cd7db6 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroCommonRenderer.java
@@ -128,7 +128,7 @@ public class MacroCommonRenderer {
         HttpServletResponse response = (HttpServletResponse) 
context.get("response");
         switch (linkType) {
         case "update-area":
-            ModelForm.UpdateArea resolveUpdateArea = new 
ModelForm.UpdateArea("onclick",
+            ModelForm.UpdateArea resolveUpdateArea = 
ModelForm.UpdateArea.literal("onclick",
                     
WidgetWorker.getScreenStack(context).resolveScreenAreaId(link.getTargetWindow(context)),
                     link.getTarget(context));
             linkUrl = 
createAjaxParamsFromUpdateAreas(UtilMisc.toList(resolveUpdateArea),
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 d6c7fee75e..9f4b3ca576 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
@@ -481,7 +481,7 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
         String backgroundSubmitRefreshTarget = 
submitField.getBackgroundSubmitRefreshTarget(context);
         ModelForm.UpdateArea jwtCallback = 
ModelForm.UpdateArea.fromJwtToken(context);
         if (UtilValidate.isNotEmpty(backgroundSubmitRefreshTarget)) {
-            updateAreas.add(new ModelForm.UpdateArea("submit", formId, 
backgroundSubmitRefreshTarget));
+            updateAreas.add(ModelForm.UpdateArea.literal("submit", formId, 
backgroundSubmitRefreshTarget));
         }
 
         // In context a callback is present and no other update area to call 
after the submit, so trigger it.
@@ -1424,7 +1424,7 @@ public final class MacroFormRenderer implements 
FormStringRenderer {
             }
             autoCompleterTarget = autoCompleterTarget + "ajaxLookup=Y";
             updateAreas = new LinkedList<>();
-            updateAreas.add(new ModelForm.UpdateArea("change", id, 
autoCompleterTarget));
+            updateAreas.add(ModelForm.UpdateArea.literal("change", id, 
autoCompleterTarget));
         }
         boolean ajaxEnabled = UtilValidate.isNotEmpty(updateAreas) && 
this.javaScriptEnabled;
         String autocomplete = "";

Reply via email to