This is an automated email from the ASF dual-hosted git repository. kusal pushed a commit to branch m02 in repository https://gitbox.apache.org/repos/asf/struts.git
commit 1bbea42769276b10dd890312ddbf37314c9a1698 Author: Kusal Kithul-Godage <g...@kusal.io> AuthorDate: Sat Apr 20 19:54:50 2024 +1000 CONFSRVDEV-26354 Reinstate legacy WebWork syntax support (partial revert 7840fa1) --- .../org/apache/struts2/components/Component.java | 24 ++++++++++++++-------- .../struts2/components/DoubleListUIBean.java | 2 +- .../org/apache/struts2/components/FormButton.java | 2 +- .../java/org/apache/struts2/components/Label.java | 11 +++++----- .../java/org/apache/struts2/components/UIBean.java | 2 +- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/components/Component.java b/core/src/main/java/org/apache/struts2/components/Component.java index ba0d672bf..70456ee3e 100644 --- a/core/src/main/java/org/apache/struts2/components/Component.java +++ b/core/src/main/java/org/apache/struts2/components/Component.java @@ -68,6 +68,7 @@ public class Component { */ protected static ConcurrentMap<Class<?>, Collection<String>> standardAttributesMap = new ConcurrentHashMap<>(); + protected boolean legacySyntax; protected boolean devMode = false; protected boolean escapeHtmlBody = false; protected ValueStack stack; @@ -103,6 +104,12 @@ public class Component { return name.substring(dot + 1).toLowerCase(); } + // Required for Confluence 8.5 LTS + @Inject(value = "struts.tag.altSyntax", required = false) + public void setLegacySyntax(String legacySyntax) { + this.legacySyntax = !BooleanUtils.toBoolean(legacySyntax); + } + @Inject(value = StrutsConstants.STRUTS_DEVMODE, required = false) public void setDevMode(String devMode) { this.devMode = BooleanUtils.toBoolean(devMode); @@ -319,6 +326,9 @@ public class Component { * @return the modified expression wrapped with %{...} */ protected String completeExpression(String expr) { + if (legacySyntax) { + return expr; + } if (expr == null) { return null; } @@ -378,15 +388,13 @@ public class Component { * @return the Object found, or <tt>null</tt> if not found. */ protected Object findValue(String expression, Class<?> toType) { - if (toType == String.class) { - if (ComponentUtils.containsExpression(expression)) { - return TextParseUtil.translateVariables('%', expression, stack); - } else { - return expression; - } + if (legacySyntax || toType != String.class) { + return getStack().findValue(stripExpression(expression), toType, throwExceptionOnELFailure); + } + if (ComponentUtils.containsExpression(expression)) { + return TextParseUtil.translateVariables('%', expression, stack); } else { - String strippedExpression = stripExpression(expression); - return getStack().findValue(strippedExpression, toType, throwExceptionOnELFailure); + return expression; } } diff --git a/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java b/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java index 9c4e30a0c..b8b7617e5 100644 --- a/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java +++ b/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java @@ -186,7 +186,7 @@ public abstract class DoubleListUIBean extends ListUIBean { Form form = (Form) findAncestor(Form.class); if (doubleId != null) { - addParameter("doubleId", findString(doubleId)); + addParameter("doubleId", legacySyntax ? doubleId : findString(doubleId)); } else if (form != null) { addParameter("doubleId", form.getParameters().get("id") + "_" + escape(doubleName != null ? findString(doubleName) : null)); } else { diff --git a/core/src/main/java/org/apache/struts2/components/FormButton.java b/core/src/main/java/org/apache/struts2/components/FormButton.java index 0ed08d47b..7051e23a2 100644 --- a/core/src/main/java/org/apache/struts2/components/FormButton.java +++ b/core/src/main/java/org/apache/struts2/components/FormButton.java @@ -99,7 +99,7 @@ public abstract class FormButton extends ClosingUIBean { String tmpId = ""; if (id != null) { // this check is needed for backwards compatibility with 2.1.x - tmpId = findString(id); + tmpId = legacySyntax ? id : findString(id); } else { if (form != null && form.getParameters().get("id") != null) { tmpId = tmpId + form.getParameters().get("id").toString() + "_"; diff --git a/core/src/main/java/org/apache/struts2/components/Label.java b/core/src/main/java/org/apache/struts2/components/Label.java index c09b88c80..17a0a9412 100644 --- a/core/src/main/java/org/apache/struts2/components/Label.java +++ b/core/src/main/java/org/apache/struts2/components/Label.java @@ -18,14 +18,13 @@ */ package org.apache.struts2.components; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.opensymphony.xwork2.util.ValueStack; +import org.apache.struts2.util.TextProviderHelper; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; -import org.apache.struts2.util.TextProviderHelper; -import com.opensymphony.xwork2.util.ValueStack; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** * <!-- START SNIPPET: javadoc --> @@ -89,7 +88,7 @@ public class Label extends UIBean { } } else if (name != null) { String expr = completeExpression(name); - addParameter("nameValue", findString(expr)); + addParameter("nameValue", legacySyntax ? expr : findString(expr)); } } diff --git a/core/src/main/java/org/apache/struts2/components/UIBean.java b/core/src/main/java/org/apache/struts2/components/UIBean.java index 59d3713ed..af446968a 100644 --- a/core/src/main/java/org/apache/struts2/components/UIBean.java +++ b/core/src/main/java/org/apache/struts2/components/UIBean.java @@ -1021,7 +1021,7 @@ public abstract class UIBean extends Component { String generatedId; if (id != null) { // this check is needed for backwards compatibility with 2.1.x - tryId = findString(id); + tryId = legacySyntax ? id : findString(id); } else if (null == (generatedId = escape(name != null ? findString(name) : null))) { LOG.debug("Cannot determine id attribute for [{}], consider defining id, name or key attribute!", this); tryId = null;