You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2020/12/06 08:59:10 UTC

[struts] branch WW-3877-removes-alt-syntax created (now eec9eb3)

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

lukaszlenart pushed a change to branch WW-3877-removes-alt-syntax
in repository https://gitbox.apache.org/repos/asf/struts.git.


      at eec9eb3  WW-3877 Drops altSyntax option

This branch includes the following new commits:

     new eec9eb3  WW-3877 Drops altSyntax option

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[struts] 01/01: WW-3877 Drops altSyntax option

Posted by lu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-3877-removes-alt-syntax
in repository https://gitbox.apache.org/repos/asf/struts.git

commit eec9eb3c0c2f4e8e85ae7f7a85e8dc13d218b109
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Sun Dec 6 09:59:01 2020 +0100

    WW-3877 Drops altSyntax option
---
 .../java/org/apache/struts2/StrutsConstants.java   |   3 -
 .../org/apache/struts2/components/Component.java   | 210 +++++++++++----------
 .../java/org/apache/struts2/components/Date.java   |   2 +-
 .../struts2/components/DoubleListUIBean.java       |  98 +++++-----
 .../org/apache/struts2/components/FormButton.java  |  39 ++--
 .../java/org/apache/struts2/components/Label.java  |   2 +-
 .../org/apache/struts2/components/ListUIBean.java  |   8 +-
 .../org/apache/struts2/components/Property.java    |   2 +-
 .../java/org/apache/struts2/components/UIBean.java |  34 ++--
 .../struts2/config/entities/ConstantConfig.java    |   9 -
 .../org/apache/struts2/util/ComponentUtils.java    |  29 +--
 .../struts2/views/jsp/StrutsBodyTagSupport.java    |  25 +--
 .../org/apache/struts2/views/util/ContextUtil.java |  19 --
 .../org/apache/struts2/default.properties          |   4 -
 .../apache/struts2/util/ComponentUtilsTest.java    |  85 +--------
 .../apache/struts2/views/jsp/PropertyTagTest.java  | 121 ++++++------
 .../apache/struts2/views/jsp/ui/FormTagTest.java   |  44 ++---
 .../apache/struts2/views/util/ContextUtilTest.java | 113 -----------
 .../views/java/simple/AbstractTagHandler.java      |  20 +-
 .../java/simple/DynamicAttributesHandler.java      |   2 +-
 .../struts2/views/java/simple/AbstractTest.java    |   2 -
 21 files changed, 303 insertions(+), 568 deletions(-)

diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java
index b48b8be..45b44a6 100644
--- a/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java
@@ -44,9 +44,6 @@ public final class StrutsConstants {
     /** Comma separated list of patterns (java.util.regex.Pattern) to be excluded from Struts2-processing */
     public static final String STRUTS_ACTION_EXCLUDE_PATTERN = "struts.action.excludePattern";
 
-    /** Whether to use the alternative syntax for the tags or not */
-    public static final String STRUTS_TAG_ALTSYNTAX = "struts.tag.altSyntax";
-
     /** Whether to use the response encoding (JSP page encoding) for s:include tag processing (false - use STRUTS_I18N_ENCODING - by default) */
     public static final String STRUTS_TAG_INCLUDETAG_USERESPONSEENCODING = "struts.tag.includetag.useResponseEncoding";
 
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 9d6742f..1794029 100644
--- a/core/src/main/java/org/apache/struts2/components/Component.java
+++ b/core/src/main/java/org/apache/struts2/components/Component.java
@@ -22,8 +22,8 @@ import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.util.TextParseUtil;
 import com.opensymphony.xwork2.util.ValueStack;
 import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.reflect.MethodUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.MethodUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.struts2.StrutsConstants;
@@ -42,7 +42,11 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.lang.reflect.Method;
-import java.util.*;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Stack;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -50,7 +54,6 @@ import java.util.concurrent.ConcurrentMap;
  * Base class to extend for UI components.
  * <br>
  * This class is a good extension point when building reusable UI components.
- *
  */
 public class Component {
 
@@ -65,7 +68,7 @@ public class Component {
 
     protected boolean devMode = false;
     protected ValueStack stack;
-    protected Map parameters;
+    protected Map<String, Object> parameters;
     protected ActionMapper actionMapper;
     protected boolean throwExceptionOnELFailure;
     private UrlHelper urlHelper;
@@ -73,7 +76,7 @@ public class Component {
     /**
      * Constructor.
      *
-     * @param stack  OGNL value stack.
+     * @param stack OGNL value stack.
      */
     public Component(ValueStack stack) {
         this.stack = stack;
@@ -83,10 +86,11 @@ public class Component {
 
     /**
      * Gets the name of this component.
+     *
      * @return the name of this component.
      */
     private String getComponentName() {
-        Class c = getClass();
+        Class<?> c = getClass();
         String name = c.getName();
         int dot = name.lastIndexOf('.');
 
@@ -112,8 +116,10 @@ public class Component {
     public void setUrlHelper(UrlHelper urlHelper) {
         this.urlHelper = urlHelper;
     }
+
     /**
      * Gets the OGNL value stack associated with this component.
+     *
      * @return the OGNL value stack associated with this component.
      */
     public ValueStack getStack() {
@@ -122,6 +128,7 @@ public class Component {
 
     /**
      * Gets the component stack of this component.
+     *
      * @return the component stack of this component, never <tt>null</tt>.
      */
     public Stack<Component> getComponentStack() {
@@ -137,7 +144,7 @@ public class Component {
      * Callback for the start tag of this component.
      * Should the body be evaluated?
      *
-     * @param writer  the output writer.
+     * @param writer the output writer.
      * @return true if the body should be evaluated
      */
     public boolean start(Writer writer) {
@@ -149,8 +156,9 @@ public class Component {
      * Should the body be evaluated again?
      * <br>
      * <b>NOTE:</b> will pop component stack.
-     * @param writer  the output writer.
-     * @param body    the rendered body.
+     *
+     * @param writer the output writer.
+     * @param body   the rendered body.
      * @return true if the body should be evaluated again
      */
     public boolean end(Writer writer, String body) {
@@ -162,13 +170,14 @@ public class Component {
      * Should the body be evaluated again?
      * <br>
      * <b>NOTE:</b> has a parameter to determine to pop the component stack.
-     * @param writer  the output writer.
-     * @param body    the rendered body.
-     * @param popComponentStack  should the component stack be popped?
+     *
+     * @param writer            the output writer.
+     * @param body              the rendered body.
+     * @param popComponentStack should the component stack be popped?
      * @return true if the body should be evaluated again
      */
     protected boolean end(Writer writer, String body, boolean popComponentStack) {
-        assert(body != null);
+        assert (body != null);
 
         try {
             writer.write(body);
@@ -190,17 +199,18 @@ public class Component {
 
     /**
      * Finds the nearest ancestor of this component stack.
+     *
      * @param clazz the class to look for, or if assignable from.
-     * @return  the component if found, <tt>null</tt> if not.
+     * @return the component if found, <tt>null</tt> if not.
      */
-    protected Component findAncestor(Class clazz) {
+    protected Component findAncestor(Class<?> clazz) {
         Stack componentStack = getComponentStack();
         int currPosition = componentStack.search(this);
         if (currPosition >= 0) {
             int start = componentStack.size() - currPosition - 1;
 
             //for (int i = componentStack.size() - 2; i >= 0; i--) {
-            for (int i = start; i >=0; i--) {
+            for (int i = start; i >= 0; i--) {
                 Component component = (Component) componentStack.get(i);
                 if (clazz.isAssignableFrom(component.getClass()) && component != this) {
                     return component;
@@ -213,8 +223,9 @@ public class Component {
 
     /**
      * Evaluates the OGNL stack to find a String value.
-     * @param expr  OGNL expression.
-     * @return  the String value found.
+     *
+     * @param expr OGNL expression.
+     * @return the String value found.
      */
     protected String findString(String expr) {
         return (String) findValue(expr, String.class);
@@ -226,10 +237,10 @@ public class Component {
      * If the given expression is <tt>null</tt> a error is logged and a <code>RuntimeException</code> is thrown
      * constructed with a messaged based on the given field and errorMsg parameter.
      *
-     * @param expr  OGNL expression.
-     * @param field   field name used when throwing <code>RuntimeException</code>.
-     * @param errorMsg  error message used when throwing <code>RuntimeException</code>.
-     * @return  the String value found.
+     * @param expr     OGNL expression.
+     * @param field    field name used when throwing <code>RuntimeException</code>.
+     * @param errorMsg error message used when throwing <code>RuntimeException</code>.
+     * @return the String value found.
      * @throws StrutsException is thrown in case of expression is null.
      */
     protected String findString(String expr, String field, String errorMsg) {
@@ -245,15 +256,16 @@ public class Component {
      * <br>
      * A message is constructed and logged at ERROR level before being returned
      * as a <code>RuntimeException</code>.
-     * @param field   field name used when throwing <code>RuntimeException</code>.
-     * @param errorMsg  error message used when throwing <code>RuntimeException</code>.
-     * @param e  the caused exception, can be <tt>null</tt>.
-     * @return  the constructed <code>StrutsException</code>.
+     *
+     * @param field    field name used when throwing <code>RuntimeException</code>.
+     * @param errorMsg error message used when throwing <code>RuntimeException</code>.
+     * @param e        the caused exception, can be <tt>null</tt>.
+     * @return the constructed <code>StrutsException</code>.
      */
     protected StrutsException fieldError(String field, String errorMsg, Exception e) {
         String msg = "tag '" + getComponentName() + "', field '" + field +
-                ( parameters != null && parameters.containsKey("name")?"', name '" + parameters.get("name"):"") +
-                "': " + errorMsg;
+            (parameters != null && parameters.containsKey("name") ? "', name '" + parameters.get("name") : "") +
+            "': " + errorMsg;
         throw new StrutsException(msg, e);
     }
 
@@ -262,7 +274,7 @@ public class Component {
      * Will always evaluate <code>expr</code> against stack except when <code>expr</code>
      * is null. If altsyntax (%{...}) is applied, simply strip it off.
      *
-     * @param expr  the expression. Returns <tt>null</tt> if expr is null.
+     * @param expr the expression. Returns <tt>null</tt> if expr is null.
      * @return the value, <tt>null</tt> if not found.
      */
     protected Object findValue(String expr) {
@@ -270,54 +282,39 @@ public class Component {
             return null;
         }
 
-        expr = stripExpressionIfAltSyntax(expr);
+        expr = stripExpression(expr);
 
         return getStack().findValue(expr, throwExceptionOnELFailure);
     }
 
     /**
-     * If altsyntax (%{...}) is applied, simply strip the "%{" and "}" off. 
+     * If altsyntax (%{...}) is applied, simply strip the "%{" and "}" off.
+     *
      * @param expr the expression (must be not null)
      * @return the stripped expression if altSyntax is enabled. Otherwise
      * the parameter expression is returned as is.
      */
-	protected String stripExpressionIfAltSyntax(String expr) {
-		return ComponentUtils.stripExpressionIfAltSyntax(stack, expr);
-	}
-
-    /**
-     * See <code>struts.properties</code> where the altSyntax flag is defined.
-     * @return if the altSyntax enabled? [TRUE]
-     */
-    public boolean altSyntax() {
-        return ComponentUtils.altSyntax(stack);
+    protected String stripExpression(String expr) {
+        return ComponentUtils.stripExpression(expr);
     }
 
     /**
      * Adds the surrounding %{ } to the expression for proper processing.
+     *
      * @param expr the expression.
-     * @return the modified expression if altSyntax is enabled, or the parameter 
-     * expression otherwise.
-     */
-	protected String completeExpressionIfAltSyntax(String expr) {
-		if (altSyntax() && !ComponentUtils.containsExpression(expr)) {
-			return "%{" + expr + "}";
-		}
-		return expr;
-	}
-
-    /**
-     * This check is needed for backwards compatibility with 2.1.x
-     * @param expr the expression.
-     * @return the found string if altSyntax is enabled. The parameter
+     * @return the modified expression if altSyntax is enabled, or the parameter
      * expression otherwise.
      */
-	protected String findStringIfAltSyntax(String expr) {
-		if (altSyntax()) {
-		    return findString(expr);
-		}
-		return expr;
-	}
+    protected String completeExpression(String expr) {
+        if (expr == null) {
+            return null;
+        }
+        if (ComponentUtils.isExpression(expr)) {
+            LOG.warn("Expression {} is already an expression!", expr);
+            return expr;
+        }
+        return "%{" + expr + "}";
+    }
 
     /**
      * <p>
@@ -331,10 +328,10 @@ public class Component {
      * messaged based on the given field and errorMsg parameter.
      * </p>
      *
-     * @param expr  OGNL expression.
-     * @param field   field name used when throwing <code>RuntimeException</code>.
-     * @param errorMsg  error message used when throwing <code>RuntimeException</code>.
-     * @return  the Object found, is never <tt>null</tt>.
+     * @param expr     OGNL expression.
+     * @param field    field name used when throwing <code>RuntimeException</code>.
+     * @param errorMsg error message used when throwing <code>RuntimeException</code>.
+     * @return the Object found, is never <tt>null</tt>.
      * @throws StrutsException is thrown in case of not found in the OGNL stack, or expression is <tt>null</tt>.
      */
     protected Object findValue(String expr, String field, String errorMsg) {
@@ -364,19 +361,20 @@ public class Component {
      * is evaluated against the stack.
      * <br>
      * This method only supports the altSyntax. So this should be set to true.
-     * @param expr  OGNL expression.
-     * @param toType  the type expected to find.
-     * @return  the Object found, or <tt>null</tt> if not found.
+     *
+     * @param expr   OGNL expression.
+     * @param toType the type expected to find.
+     * @return the Object found, or <tt>null</tt> if not found.
      */
-    protected Object findValue(String expr, Class toType) {
-        if (altSyntax() && toType == String.class) {
+    protected Object findValue(String expr, Class<?> toType) {
+        if (toType == String.class) {
             if (ComponentUtils.containsExpression(expr)) {
                 return TextParseUtil.translateVariables('%', expr, stack);
             } else {
                 return expr;
             }
         } else {
-            expr = stripExpressionIfAltSyntax(expr);
+            expr = stripExpression(expr);
 
             return getStack().findValue(expr, toType, throwExceptionOnELFailure);
         }
@@ -384,26 +382,28 @@ public class Component {
 
     /**
      * Detects if altSyntax is enabled and then checks if expression contains %{...}
+     *
      * @param expr a string to examined
      * @return true if altSyntax is enabled and expr contains %{...}
      */
     protected boolean recursion(String expr) {
-        return ComponentUtils.altSyntax(stack) && ComponentUtils.containsExpression(expr);
+        return ComponentUtils.containsExpression(expr);
     }
 
     /**
      * Renders an action URL by consulting the {@link org.apache.struts2.dispatcher.mapper.ActionMapper}.
-     * @param action      the action
-     * @param namespace   the namespace
-     * @param method      the method
-     * @param req         HTTP request
-     * @param res         HTTP response
-     * @param parameters  parameters
-     * @param scheme      http or https
-     * @param includeContext  should the context path be included or not
-     * @param encodeResult    should the url be encoded
-     * @param forceAddSchemeHostAndPort    should the scheme host and port be forced
-     * @param escapeAmp    should ampersand (&amp;) be escaped to &amp;amp;
+     *
+     * @param action                    the action
+     * @param namespace                 the namespace
+     * @param method                    the method
+     * @param req                       HTTP request
+     * @param res                       HTTP response
+     * @param parameters                parameters
+     * @param scheme                    http or https
+     * @param includeContext            should the context path be included or not
+     * @param encodeResult              should the url be encoded
+     * @param forceAddSchemeHostAndPort should the scheme host and port be forced
+     * @param escapeAmp                 should ampersand (&amp;) be escaped to &amp;amp;
      * @return the action url.
      */
     protected String determineActionURL(String action, String namespace, String method,
@@ -420,10 +420,11 @@ public class Component {
 
     /**
      * Determines the namespace of the current page being renderdd. Useful for Form, URL, and href generations.
-     * @param namespace  the namespace
-     * @param stack      OGNL value stack
-     * @param req        HTTP request
-     * @return  the namepsace of the current page being rendered, is never <tt>null</tt>.
+     *
+     * @param namespace the namespace
+     * @param stack     OGNL value stack
+     * @param req       HTTP request
+     * @return the namepsace of the current page being rendered, is never <tt>null</tt>.
      */
     protected String determineNamespace(String namespace, ValueStack stack, HttpServletRequest req) {
         String result;
@@ -447,15 +448,14 @@ public class Component {
      * pushed before the component itself, any key-value pair that can't be assigned to component
      * will be set in the parameters Map.
      *
-     * @param params  the parameters to copy.
+     * @param params the parameters to copy.
      */
-    public void copyParams(Map params) {
+    public void copyParams(Map<String, Object> params) {
         stack.push(parameters);
         stack.push(this);
         try {
-            for (Object o : params.entrySet()) {
-                Map.Entry entry = (Map.Entry) o;
-                String key = (String) entry.getKey();
+            for (Map.Entry<String, Object> entry : params.entrySet()) {
+                String key = entry.getKey();
 
                 if (key.indexOf('-') >= 0) {
                     // UI component attributes may contain hypens (e.g. data-ajax), but ognl
@@ -474,12 +474,13 @@ public class Component {
 
     /**
      * Constructs a string representation of the given exception.
-     * @param t  the exception
+     *
+     * @param t the exception
      * @return the exception as a string.
      */
     protected String toString(Throwable t) {
         try (FastByteArrayOutputStream bout = new FastByteArrayOutputStream();
-                PrintWriter wrt = new PrintWriter(bout)) {
+             PrintWriter wrt = new PrintWriter(bout)) {
             t.printStackTrace(wrt);
             return bout.toString();
         }
@@ -487,17 +488,19 @@ public class Component {
 
     /**
      * Gets the parameters.
+     *
      * @return the parameters. Is never <tt>null</tt>.
      */
-    public Map getParameters() {
+    public Map<String, Object> getParameters() {
         return parameters;
     }
 
     /**
      * Adds all the given parameters to this component's own parameters.
+     *
      * @param params the parameters to add.
      */
-    public void addAllParameters(Map params) {
+    public void addAllParameters(Map<String, Object> params) {
         parameters.putAll(params);
     }
 
@@ -507,12 +510,13 @@ public class Component {
      * If the provided key is <tt>null</tt> nothing happens.
      * If the provided value is <tt>null</tt> any existing parameter with
      * the given key name is removed.
-     * @param key  the key of the new parameter to add.
+     *
+     * @param key   the key of the new parameter to add.
      * @param value the value associated with the key.
      */
     public void addParameter(String key, Object value) {
         if (key != null) {
-            Map params = getParameters();
+            Map<String, Object> params = getParameters();
 
             if (value == null) {
                 params.remove(key);
@@ -524,6 +528,7 @@ public class Component {
 
     /**
      * Overwrite to set if body should be used.
+     *
      * @return always false for this component.
      */
     public boolean usesBody() {
@@ -532,9 +537,8 @@ public class Component {
 
     /**
      * Override to set if body content should be HTML-escaped.
-     * 
+     *
      * @return always true (default) for this component.
-     * 
      * @since 2.6
      */
     public boolean escapeHtmlBody() {
@@ -557,13 +561,13 @@ public class Component {
      * @return list of attributes
      */
     protected Collection<String> getStandardAttributes() {
-        Class clz = getClass();
+        Class<?> clz = getClass();
         Collection<String> standardAttributes = standardAttributesMap.get(clz);
         if (standardAttributes == null) {
             Collection<Method> methods = MethodUtils.getMethodsListWithAnnotation(clz, StrutsTagAttribute.class,
-                    true, true);
+                true, true);
             standardAttributes = new HashSet<>(methods.size());
-            for(Method m : methods) {
+            for (Method m : methods) {
                 standardAttributes.add(StringUtils.uncapitalize(m.getName().substring(3)));
             }
             standardAttributesMap.putIfAbsent(clz, standardAttributes);
diff --git a/core/src/main/java/org/apache/struts2/components/Date.java b/core/src/main/java/org/apache/struts2/components/Date.java
index a68e339..5f65d9c 100644
--- a/core/src/main/java/org/apache/struts2/components/Date.java
+++ b/core/src/main/java/org/apache/struts2/components/Date.java
@@ -368,7 +368,7 @@ public class Date extends ContextBean {
     private ZoneId getTimeZone() {
         ZoneId tz = ZoneId.systemDefault();
         if (timezone != null) {
-            timezone = stripExpressionIfAltSyntax(timezone);
+            timezone = stripExpression(timezone);
             String actualTimezone = (String) getStack().findValue(timezone, String.class);
             if (actualTimezone != null) {
                 timezone = actualTimezone;
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 1ce54ad..9c4e30a 100644
--- a/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
+++ b/core/src/main/java/org/apache/struts2/components/DoubleListUIBean.java
@@ -29,16 +29,15 @@ import java.util.Map;
  * <p>
  * DoubleListUIBean is the standard superclass of all Struts double list handling components.
  * </p>
- *
+ * <p>
  * <!-- START SNIPPET: javadoc -->
  * <p>
  * Note that the doublelistkey and doublelistvalue attribute will default to "key" and "value"
  * respectively only when the doublelist attribute is evaluated to a Map or its descendant.
  * Other thing else, will result in doublelistkey and doublelistvalue to be null and not used.
  * </p>
- *
+ * <p>
  * <!-- END SNIPPET: javadoc -->
- *
  */
 public abstract class DoubleListUIBean extends ListUIBean {
 
@@ -137,21 +136,21 @@ public abstract class DoubleListUIBean extends ListUIBean {
         Object tmpDoubleList = findValue(doubleList);
         if (doubleListKey != null) {
             addParameter("doubleListKey", doubleListKey);
-        }else if (tmpDoubleList instanceof Map) {
+        } else if (tmpDoubleList instanceof Map) {
             addParameter("doubleListKey", "key");
         }
 
         if (doubleListValue != null) {
-        	doubleListValue = stripExpressionIfAltSyntax(doubleListValue);
+            doubleListValue = stripExpression(doubleListValue);
 
             addParameter("doubleListValue", doubleListValue);
-        }else if (tmpDoubleList instanceof Map) {
+        } else if (tmpDoubleList instanceof Map) {
             addParameter("doubleListValue", "value");
         }
         if (doubleListCssClass != null) {
             addParameter("doubleListCssClass", findString(doubleListCssClass));
         }
-        if (doubleListCssStyle!= null) {
+        if (doubleListCssStyle != null) {
             addParameter("doubleListCssStyle", findString(doubleListCssStyle));
         }
         if (doubleListTitle != null) {
@@ -169,7 +168,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
             }
         }
 
-        Class valueClazz = getValueClassType();
+        Class<?> valueClazz = getValueClassType();
 
         if (valueClazz != null) {
             if (doubleValue != null) {
@@ -187,10 +186,9 @@ public abstract class DoubleListUIBean extends ListUIBean {
 
         Form form = (Form) findAncestor(Form.class);
         if (doubleId != null) {
-            // this check is needed for backwards compatibility with 2.1.x
-        	addParameter("doubleId", findStringIfAltSyntax(doubleId));
+            addParameter("doubleId", findString(doubleId));
         } else if (form != null) {
-            addParameter("doubleId", form.getParameters().get("id") + "_" +escape(doubleName !=null ? findString(doubleName) : null));
+            addParameter("doubleId", form.getParameters().get("id") + "_" + escape(doubleName != null ? findString(doubleName) : null));
         } else {
             addParameter("doubleId", escape(doubleName != null ? findString(doubleName) : null));
         }
@@ -269,23 +267,23 @@ public abstract class DoubleListUIBean extends ListUIBean {
         }
     }
 
-    @StrutsTagAttribute(description="The second iterable source to populate from.", required=true)
+    @StrutsTagAttribute(description = "The second iterable source to populate from.", required = true)
     public void setDoubleList(String doubleList) {
         this.doubleList = doubleList;
     }
 
-    @StrutsTagAttribute(description="The key expression to use for second list")
+    @StrutsTagAttribute(description = "The key expression to use for second list")
     public void setDoubleListKey(String doubleListKey) {
         this.doubleListKey = doubleListKey;
     }
 
-    @StrutsTagAttribute(description="The value expression to use for second list")
+    @StrutsTagAttribute(description = "The value expression to use for second list")
     public void setDoubleListValue(String doubleListValue) {
         this.doubleListValue = doubleListValue;
     }
 
     @StrutsTagAttribute(description = "Property of second list objects to get css class from")
-     public void setDoubleListCssClass(String doubleListCssClass) {
+    public void setDoubleListCssClass(String doubleListCssClass) {
         this.doubleListCssClass = doubleListCssClass;
     }
 
@@ -299,17 +297,17 @@ public abstract class DoubleListUIBean extends ListUIBean {
         this.doubleListTitle = doubleListTitle;
     }
 
-    @StrutsTagAttribute(description="The name for complete component", required=true)
+    @StrutsTagAttribute(description = "The name for complete component", required = true)
     public void setDoubleName(String doubleName) {
         this.doubleName = doubleName;
     }
 
-    @StrutsTagAttribute(description="The value expression for complete component")
+    @StrutsTagAttribute(description = "The value expression for complete component")
     public void setDoubleValue(String doubleValue) {
         this.doubleValue = doubleValue;
     }
 
-    @StrutsTagAttribute(description="The form name this component resides in and populates to")
+    @StrutsTagAttribute(description = "The form name this component resides in and populates to")
     public void setFormName(String formName) {
         this.formName = formName;
     }
@@ -318,7 +316,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return formName;
     }
 
-    @StrutsTagAttribute(description="The css class for the second list")
+    @StrutsTagAttribute(description = "The css class for the second list")
     public void setDoubleCssClass(String doubleCssClass) {
         this.doubleCssClass = doubleCssClass;
     }
@@ -327,7 +325,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleCssClass;
     }
 
-    @StrutsTagAttribute(description="The css style for the second list")
+    @StrutsTagAttribute(description = "The css style for the second list")
     public void setDoubleCssStyle(String doubleCssStyle) {
         this.doubleCssStyle = doubleCssStyle;
     }
@@ -336,7 +334,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleCssStyle;
     }
 
-    @StrutsTagAttribute(description="The header key for the second list")
+    @StrutsTagAttribute(description = "The header key for the second list")
     public void setDoubleHeaderKey(String doubleHeaderKey) {
         this.doubleHeaderKey = doubleHeaderKey;
     }
@@ -345,7 +343,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleHeaderKey;
     }
 
-    @StrutsTagAttribute(description="The header value for the second list")
+    @StrutsTagAttribute(description = "The header value for the second list")
     public void setDoubleHeaderValue(String doubleHeaderValue) {
         this.doubleHeaderValue = doubleHeaderValue;
     }
@@ -354,7 +352,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleHeaderValue;
     }
 
-    @StrutsTagAttribute(description="Decides if the second list will add an empty option")
+    @StrutsTagAttribute(description = "Decides if the second list will add an empty option")
     public void setDoubleEmptyOption(String doubleEmptyOption) {
         this.doubleEmptyOption = doubleEmptyOption;
     }
@@ -368,7 +366,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleDisabled;
     }
 
-    @StrutsTagAttribute(description="Decides if a disable attribute should be added to the second list")
+    @StrutsTagAttribute(description = "Decides if a disable attribute should be added to the second list")
     public void setDoubleDisabled(String doubleDisabled) {
         this.doubleDisabled = doubleDisabled;
     }
@@ -377,7 +375,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleId;
     }
 
-    @StrutsTagAttribute(description="The id of the second list")
+    @StrutsTagAttribute(description = "The id of the second list")
     public void setDoubleId(String doubleId) {
         this.doubleId = doubleId;
     }
@@ -386,7 +384,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleMultiple;
     }
 
-    @StrutsTagAttribute(description=" Decides if multiple attribute should be set on the second list")
+    @StrutsTagAttribute(description = " Decides if multiple attribute should be set on the second list")
     public void setDoubleMultiple(String doubleMultiple) {
         this.doubleMultiple = doubleMultiple;
     }
@@ -395,7 +393,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnblur;
     }
 
-    @StrutsTagAttribute(description="Set the onblur attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onblur attribute of the second list")
     public void setDoubleOnblur(String doubleOnblur) {
         this.doubleOnblur = doubleOnblur;
     }
@@ -404,7 +402,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnchange;
     }
 
-    @StrutsTagAttribute(description="Set the onchange attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onchange attribute of the second list")
     public void setDoubleOnchange(String doubleOnchange) {
         this.doubleOnchange = doubleOnchange;
     }
@@ -413,7 +411,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnclick;
     }
 
-    @StrutsTagAttribute(description="Set the onclick attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onclick attribute of the second list")
     public void setDoubleOnclick(String doubleOnclick) {
         this.doubleOnclick = doubleOnclick;
     }
@@ -422,7 +420,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOndblclick;
     }
 
-    @StrutsTagAttribute(description="Set the ondbclick attribute of the second list")
+    @StrutsTagAttribute(description = "Set the ondbclick attribute of the second list")
     public void setDoubleOndblclick(String doubleOndblclick) {
         this.doubleOndblclick = doubleOndblclick;
     }
@@ -431,7 +429,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnfocus;
     }
 
-    @StrutsTagAttribute(description="Set the onfocus attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onfocus attribute of the second list")
     public void setDoubleOnfocus(String doubleOnfocus) {
         this.doubleOnfocus = doubleOnfocus;
     }
@@ -440,7 +438,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnkeydown;
     }
 
-    @StrutsTagAttribute(description="Set the onkeydown attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onkeydown attribute of the second list")
     public void setDoubleOnkeydown(String doubleOnkeydown) {
         this.doubleOnkeydown = doubleOnkeydown;
     }
@@ -449,7 +447,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnkeypress;
     }
 
-    @StrutsTagAttribute(description="Set the onkeypress attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onkeypress attribute of the second list")
     public void setDoubleOnkeypress(String doubleOnkeypress) {
         this.doubleOnkeypress = doubleOnkeypress;
     }
@@ -458,7 +456,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnkeyup;
     }
 
-    @StrutsTagAttribute(description="Set the onkeyup attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onkeyup attribute of the second list")
     public void setDoubleOnkeyup(String doubleOnkeyup) {
         this.doubleOnkeyup = doubleOnkeyup;
     }
@@ -467,7 +465,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnmousedown;
     }
 
-    @StrutsTagAttribute(description="Set the onmousedown attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onmousedown attribute of the second list")
     public void setDoubleOnmousedown(String doubleOnmousedown) {
         this.doubleOnmousedown = doubleOnmousedown;
     }
@@ -476,7 +474,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnmousemove;
     }
 
-    @StrutsTagAttribute(description="Set the onmousemove attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onmousemove attribute of the second list")
     public void setDoubleOnmousemove(String doubleOnmousemove) {
         this.doubleOnmousemove = doubleOnmousemove;
     }
@@ -485,7 +483,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnmouseout;
     }
 
-    @StrutsTagAttribute(description="Set the onmouseout attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onmouseout attribute of the second list")
     public void setDoubleOnmouseout(String doubleOnmouseout) {
         this.doubleOnmouseout = doubleOnmouseout;
     }
@@ -494,7 +492,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnmouseover;
     }
 
-    @StrutsTagAttribute(description="Set the onmouseover attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onmouseover attribute of the second list")
     public void setDoubleOnmouseover(String doubleOnmouseover) {
         this.doubleOnmouseover = doubleOnmouseover;
     }
@@ -503,7 +501,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnmouseup;
     }
 
-    @StrutsTagAttribute(description="Set the onmouseup attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onmouseup attribute of the second list")
     public void setDoubleOnmouseup(String doubleOnmouseup) {
         this.doubleOnmouseup = doubleOnmouseup;
     }
@@ -512,7 +510,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleOnselect;
     }
 
-    @StrutsTagAttribute(description="Set the onselect attribute of the second list")
+    @StrutsTagAttribute(description = "Set the onselect attribute of the second list")
     public void setDoubleOnselect(String doubleOnselect) {
         this.doubleOnselect = doubleOnselect;
     }
@@ -521,7 +519,7 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleSize;
     }
 
-    @StrutsTagAttribute(description="Set the size attribute of the second list")
+    @StrutsTagAttribute(description = "Set the size attribute of the second list")
     public void setDoubleSize(String doubleSize) {
         this.doubleSize = doubleSize;
     }
@@ -546,36 +544,36 @@ public abstract class DoubleListUIBean extends ListUIBean {
         return doubleValue;
     }
 
-    @StrutsTagAttribute(description="Decides of an empty option is to be inserted in the second list", type="Boolean", defaultValue="false")
+    @StrutsTagAttribute(description = "Decides of an empty option is to be inserted in the second list", type = "Boolean", defaultValue = "false")
     public void setEmptyOption(String emptyOption) {
         this.emptyOption = emptyOption;
     }
 
-    @StrutsTagAttribute(description="Set the header key of the second list. Must not be empty! " +
-                "'-1' and '' is correct, '' is bad.")
+    @StrutsTagAttribute(description = "Set the header key of the second list. Must not be empty! " +
+        "'-1' and '' is correct, '' is bad.")
     public void setHeaderKey(String headerKey) {
         this.headerKey = headerKey;
     }
 
-    @StrutsTagAttribute(description=" Set the header value of the second list")
+    @StrutsTagAttribute(description = " Set the header value of the second list")
     public void setHeaderValue(String headerValue) {
         this.headerValue = headerValue;
     }
 
-    @StrutsTagAttribute(description="Creates a multiple select. " +
-                "The tag will pre-select multiple values if the values are passed as an Array " +
-                "(of appropriate types) via the value attribute.")
+    @StrutsTagAttribute(description = "Creates a multiple select. " +
+        "The tag will pre-select multiple values if the values are passed as an Array " +
+        "(of appropriate types) via the value attribute.")
     public void setMultiple(String multiple) {
         // TODO: Passing a Collection may work too?
         this.multiple = multiple;
     }
 
-    @StrutsTagAttribute(description="Size of the element box (# of elements to show)", type="Integer")
+    @StrutsTagAttribute(description = "Size of the element box (# of elements to show)", type = "Integer")
     public void setSize(String size) {
         this.size = size;
     }
 
-    @StrutsTagAttribute(description="Set the html accesskey attribute.")
+    @StrutsTagAttribute(description = "Set the html accesskey attribute.")
     public void setDoubleAccesskey(String doubleAccesskey) {
         this.doubleAccesskey = doubleAccesskey;
     }
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 7dcc7ae..5cf88bc 100644
--- a/core/src/main/java/org/apache/struts2/components/FormButton.java
+++ b/core/src/main/java/org/apache/struts2/components/FormButton.java
@@ -18,24 +18,23 @@
  */
 package org.apache.struts2.components;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.struts2.views.annotations.StrutsTagAttribute;
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.ValueStack;
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import org.apache.struts2.views.annotations.StrutsTagAttribute;
 
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * FormButton.
  */
 public abstract class FormButton extends ClosingUIBean {
 
-    static final String BUTTONTYPE_INPUT = "input";
-    static final String BUTTONTYPE_BUTTON = "button";
-    static final String BUTTONTYPE_IMAGE = "image";
+    private static final String BUTTON_TYPE_INPUT = "input";
+    private static final String BUTTON_TYPE_BUTTON = "button";
+    private static final String BUTTON_TYPE_IMAGE = "image";
 
     protected String action;
     protected String method;
@@ -49,9 +48,8 @@ public abstract class FormButton extends ClosingUIBean {
     public void evaluateExtraParams() {
         super.evaluateExtraParams();
 
-        String submitType = BUTTONTYPE_INPUT;
-        if (type != null && (BUTTONTYPE_BUTTON.equalsIgnoreCase(type) || (supportsImageType() && BUTTONTYPE_IMAGE.equalsIgnoreCase(type))))
-        {
+        String submitType = BUTTON_TYPE_INPUT;
+        if (type != null && (BUTTON_TYPE_BUTTON.equalsIgnoreCase(type) || (supportsImageType() && BUTTON_TYPE_IMAGE.equalsIgnoreCase(type)))) {
             submitType = type;
         }
 
@@ -59,7 +57,7 @@ public abstract class FormButton extends ClosingUIBean {
 
         addParameter("type", submitType);
 
-        if (!BUTTONTYPE_INPUT.equals(submitType) && (label == null)) {
+        if (!BUTTON_TYPE_INPUT.equals(submitType) && (label == null)) {
             addParameter("label", getParameters().get("nameValue"));
         }
 
@@ -101,15 +99,14 @@ public abstract class FormButton extends ClosingUIBean {
         String _tmp_id = "";
         if (id != null) {
             // this check is needed for backwards compatibility with 2.1.x
-        	_tmp_id = findStringIfAltSyntax(id);
-        }
-        else {
+            _tmp_id = findString(id);
+        } else {
             if (form != null && form.getParameters().get("id") != null) {
                 _tmp_id = _tmp_id + form.getParameters().get("id").toString() + "_";
             }
             if (name != null) {
                 _tmp_id = _tmp_id + escape(name);
-            } else if (action != null || method != null){
+            } else if (action != null || method != null) {
                 if (action != null) {
                     _tmp_id = _tmp_id + escape(action);
                 }
@@ -139,19 +136,19 @@ public abstract class FormButton extends ClosingUIBean {
         this.actionMapper = mapper;
     }
 
-    @StrutsTagAttribute(description="Set action attribute.")
+    @StrutsTagAttribute(description = "Set action attribute.")
     public void setAction(String action) {
         this.action = action;
     }
 
-    @StrutsTagAttribute(description="Set method attribute.")
+    @StrutsTagAttribute(description = "Set method attribute.")
     public void setMethod(String method) {
         this.method = method;
     }
 
 
-    @StrutsTagAttribute(description="The type of submit to use. Valid values are <i>input</i>, " +
-                "<i>button</i> and <i>image</i>.", defaultValue="input")
+    @StrutsTagAttribute(description = "The type of submit to use. Valid values are <i>input</i>, " +
+        "<i>button</i> and <i>image</i>.", defaultValue = "input")
     public void setType(String type) {
         this.type = type;
     }
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 f81d36a..c09b88c 100644
--- a/core/src/main/java/org/apache/struts2/components/Label.java
+++ b/core/src/main/java/org/apache/struts2/components/Label.java
@@ -88,7 +88,7 @@ public class Label extends UIBean {
                 addParameter("nameValue", providedLabel);
             }
         } else if (name != null) {
-            String expr = completeExpressionIfAltSyntax(name);
+            String expr = completeExpression(name);
             addParameter("nameValue", findString(expr));
         }
     }
diff --git a/core/src/main/java/org/apache/struts2/components/ListUIBean.java b/core/src/main/java/org/apache/struts2/components/ListUIBean.java
index ed50941..14cf74a 100644
--- a/core/src/main/java/org/apache/struts2/components/ListUIBean.java
+++ b/core/src/main/java/org/apache/struts2/components/ListUIBean.java
@@ -104,7 +104,7 @@ public abstract class ListUIBean extends UIBean {
         }
 
         if (listKey != null) {
-            listKey = stripExpressionIfAltSyntax(listKey);
+            listKey = stripExpression(listKey);
             addParameter("listKey", listKey);
         } else if (value instanceof Map) {
             addParameter("listKey", "key");
@@ -113,12 +113,12 @@ public abstract class ListUIBean extends UIBean {
         }
 
         if (listValueKey != null) {
-            listValueKey = stripExpressionIfAltSyntax(listValueKey);
+            listValueKey = stripExpression(listValueKey);
             addParameter("listValueKey", listValueKey);
         }
 
         if (listValue != null) {
-            listValue = stripExpressionIfAltSyntax(listValue);
+            listValue = stripExpression(listValue);
             addParameter("listValue", listValue);
         } else if (value instanceof Map) {
             addParameter("listValue", "value");
@@ -127,7 +127,7 @@ public abstract class ListUIBean extends UIBean {
         }
 
         if (listLabelKey != null) {
-            listLabelKey = stripExpressionIfAltSyntax(listLabelKey);
+            listLabelKey = stripExpression(listLabelKey);
             addParameter("listLabelKey", listLabelKey);
         }
 
diff --git a/core/src/main/java/org/apache/struts2/components/Property.java b/core/src/main/java/org/apache/struts2/components/Property.java
index 4be2025..29aebe9 100644
--- a/core/src/main/java/org/apache/struts2/components/Property.java
+++ b/core/src/main/java/org/apache/struts2/components/Property.java
@@ -140,7 +140,7 @@ public class Property extends Component {
             value = "top";
         }
         else {
-        	value = stripExpressionIfAltSyntax(value);
+        	value = stripExpression(value);
         }
 
         // exception: don't call findString(), since we don't want the
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 8c29beb..68fff20 100644
--- a/core/src/main/java/org/apache/struts2/components/UIBean.java
+++ b/core/src/main/java/org/apache/struts2/components/UIBean.java
@@ -788,13 +788,13 @@ public abstract class UIBean extends Component {
             parameters.put("nameValue", parameters.get("value"));
         } else {
             if (evaluateNameValue()) {
-                final Class valueClazz = getValueClassType();
+                final Class<?> valueClazz = getValueClassType();
 
                 if (valueClazz != null) {
                     if (value != null) {
                         addParameter("nameValue", findValue(value, valueClazz));
                     } else if (name != null) {
-                        String expr = completeExpressionIfAltSyntax(name);
+                        String expr = completeExpression(name);
                         if (recursion(name)) {
                             addParameter("nameValue", expr);
                         } else {
@@ -834,19 +834,18 @@ public abstract class UIBean extends Component {
         if (tooltip != null) {
             addParameter("tooltip", findString(tooltip));
 
-            Map tooltipConfigMap = getTooltipConfig(this);
+            Map<String, String> tooltipConfigMap = getTooltipConfig(this);
 
             if (form != null) { // inform the containing form that we need tooltip javascript included
                 form.addParameter("hasTooltip", Boolean.TRUE);
 
                 // tooltipConfig defined in component itself will take precedence
                 // over those defined in the containing form
-                Map overallTooltipConfigMap = getTooltipConfig(form);
+                Map<String, String> overallTooltipConfigMap = getTooltipConfig(form);
                 overallTooltipConfigMap.putAll(tooltipConfigMap); // override parent form's tooltip config
 
-                for (Object o : overallTooltipConfigMap.entrySet()) {
-                    Map.Entry entry = (Map.Entry) o;
-                    addParameter((String) entry.getKey(), entry.getValue());
+                for (Map.Entry<String, String> entry : overallTooltipConfigMap.entrySet()) {
+                    addParameter(entry.getKey(), entry.getValue());
                 }
             }
             else {
@@ -899,7 +898,7 @@ public abstract class UIBean extends Component {
     protected String escape(String name) {
         // escape any possible values that can make the ID painful to work with in JavaScript
         if (name != null) {
-            return name.replaceAll("[\\/\\.\\[\\]\'\"]", "_");
+            return name.replaceAll("[/.\\[\\]'\"]", "_");
         } else {
             return null;
         }
@@ -926,7 +925,7 @@ public abstract class UIBean extends Component {
         return true;
     }
 
-    protected Class getValueClassType() {
+    protected Class<?> getValueClassType() {
         return String.class;
     }
 
@@ -948,7 +947,7 @@ public abstract class UIBean extends Component {
         }
     }
 
-    protected Map getTooltipConfig(UIBean component) {
+    protected Map<String, String> getTooltipConfig(UIBean component) {
         Object tooltipConfigObj = component.getParameters().get("tooltipConfig");
         Map<String, String> tooltipConfig = new LinkedHashMap<>();
 
@@ -1005,7 +1004,7 @@ public abstract class UIBean extends Component {
         String generatedId;
         if (id != null) {
             // this check is needed for backwards compatibility with 2.1.x
-            tryId = findStringIfAltSyntax(id);
+            tryId = 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;
@@ -1261,17 +1260,16 @@ public abstract class UIBean extends Component {
         }
     }
 
-    @Override
     /**
      * supports dynamic attributes for freemarker ui tags
-     * @see https://issues.apache.org/jira/browse/WW-3174
-     * @see https://issues.apache.org/jira/browse/WW-4166
+     * @see <a href="https://issues.apache.org/jira/browse/WW-3174">WW-3174</a>
+     * @see <a href="https://issues.apache.org/jira/browse/WW-4166">WW-4166</a>
      */
-    public void copyParams(Map params) {
+    @Override
+    public void copyParams(Map<String, Object> params) {
         super.copyParams(params);
-        for (Object o : params.entrySet()) {
-            Map.Entry entry = (Map.Entry) o;
-            String key = (String) entry.getKey();
+        for (Map.Entry<String, Object>entry : params.entrySet()) {
+            String key = entry.getKey();
             if (!isValidTagAttribute(key) && !key.equals("dynamicAttributes")) {
                 dynamicAttributes.put(key, entry.getValue());
             }
diff --git a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java
index bb648ec..1245558 100644
--- a/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java
+++ b/core/src/main/java/org/apache/struts2/config/entities/ConstantConfig.java
@@ -169,7 +169,6 @@ public class ConstantConfig {
         map.put(StrutsConstants.STRUTS_CONFIGURATION_XML_RELOAD, Objects.toString(configurationXmlReload, null));
         map.put(StrutsConstants.STRUTS_ACTION_EXTENSION, StringUtils.join(actionExtension, ','));
         map.put(StrutsConstants.STRUTS_ACTION_EXCLUDE_PATTERN, StringUtils.join(actionExcludePattern, ','));
-        map.put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, Objects.toString(tagAltSyntax, null));
         map.put(StrutsConstants.STRUTS_URL_HTTP_PORT, Objects.toString(urlHttpPort, null));
         map.put(StrutsConstants.STRUTS_URL_HTTPS_PORT, Objects.toString(urlHttpsPort, null));
         map.put(StrutsConstants.STRUTS_URL_INCLUDEPARAMS, urlIncludeParams);
@@ -327,14 +326,6 @@ public class ConstantConfig {
         this.actionExcludePattern = actionExcludePattern;
     }
 
-    public Boolean getTagAltSyntax() {
-        return tagAltSyntax;
-    }
-
-    public void setTagAltSyntax(Boolean tagAltSyntax) {
-        this.tagAltSyntax = tagAltSyntax;
-    }
-
     public Integer getUrlHttpPort() {
         return urlHttpPort;
     }
diff --git a/core/src/main/java/org/apache/struts2/util/ComponentUtils.java b/core/src/main/java/org/apache/struts2/util/ComponentUtils.java
index 56abbe9..edbcb7f 100644
--- a/core/src/main/java/org/apache/struts2/util/ComponentUtils.java
+++ b/core/src/main/java/org/apache/struts2/util/ComponentUtils.java
@@ -18,9 +18,6 @@
  */
 package org.apache.struts2.util;
 
-import com.opensymphony.xwork2.util.ValueStack;
-import org.apache.struts2.views.util.ContextUtil;
-
 /**
  * Various static methods used with components
  */
@@ -29,33 +26,19 @@ public class ComponentUtils {
     /**
      * If altSyntax (%{...}) is applied, simply strip the "%{" and "}" off.
      *
-     * @param stack the ValueStack where the context value is searched for.
-     * @param expr  the expression (must be not null)
+     * @param expr the expression (must be not null)
      * @return the stripped expression if altSyntax is enabled. Otherwise
-     *         the parameter expression is returned as is.
+     * the parameter expression is returned as is.
      */
-    public static String stripExpressionIfAltSyntax(ValueStack stack, String expr) {
-        if (altSyntax(stack)) {
-            // does the expression start with %{ and end with }? if so, just cut it off!
-            if (isExpression(expr)) {
-                return expr.substring(2, expr.length() - 1);
-            }
+    public static String stripExpression(String expr) {
+        // does the expression start with %{ and end with }? if so, just cut it off!
+        if (isExpression(expr)) {
+            return expr.substring(2, expr.length() - 1);
         }
         return expr;
     }
 
     /**
-     * Is the altSyntax enabled? [TRUE]
-     *
-     * @param stack the ValueStack where the context value is searched for.
-     * @return true if altSyntax is activated. False otherwise.
-     *         See <code>struts.properties</code> where the altSyntax flag is defined.
-     */
-    public static boolean altSyntax(ValueStack stack) {
-        return ContextUtil.isUseAltSyntax(stack.getContext());
-    }
-
-    /**
      * Check if object is expression base on altSyntax
      *
      * @param expr to treat as an expression
diff --git a/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java b/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
index 01921aa..2a89b0e 100644
--- a/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
+++ b/core/src/main/java/org/apache/struts2/views/jsp/StrutsBodyTagSupport.java
@@ -18,19 +18,16 @@
  */
 package org.apache.struts2.views.jsp;
 
-import java.io.PrintWriter;
-
-import javax.servlet.jsp.tagext.BodyTagSupport;
-
+import com.opensymphony.xwork2.util.TextParseUtil;
+import com.opensymphony.xwork2.util.ValueStack;
 import org.apache.struts2.util.ComponentUtils;
 import org.apache.struts2.util.FastByteArrayOutputStream;
 
-import com.opensymphony.xwork2.util.TextParseUtil;
-import com.opensymphony.xwork2.util.ValueStack;
+import javax.servlet.jsp.tagext.BodyTagSupport;
+import java.io.PrintWriter;
 
 /**
  * Contains common functonalities for Struts JSP Tags.
- *
  */
 public class StrutsBodyTagSupport extends BodyTagSupport {
 
@@ -45,25 +42,23 @@ public class StrutsBodyTagSupport extends BodyTagSupport {
     }
 
     protected Object findValue(String expr) {
-    	expr = ComponentUtils.stripExpressionIfAltSyntax(getStack(), expr);
+        expr = ComponentUtils.stripExpression(expr);
 
         return getStack().findValue(expr);
     }
 
-    protected Object findValue(String expr, Class toType) {
-        if (ComponentUtils.altSyntax(getStack()) && toType == String.class) {
-        	return TextParseUtil.translateVariables('%', expr, getStack());
-            //return translateVariables(expr, getStack());
+    protected Object findValue(String expr, Class<?> toType) {
+        if (toType == String.class) {
+            return TextParseUtil.translateVariables('%', expr, getStack());
         } else {
-        	expr = ComponentUtils.stripExpressionIfAltSyntax(getStack(), expr);
-
+            expr = ComponentUtils.stripExpression(expr);
             return getStack().findValue(expr, toType);
         }
     }
 
     protected String toString(Throwable t) {
         try (FastByteArrayOutputStream bout = new FastByteArrayOutputStream();
-                PrintWriter wrt = new PrintWriter(bout)) {
+             PrintWriter wrt = new PrintWriter(bout)) {
             t.printStackTrace(wrt);
 
             return bout.toString();
diff --git a/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java b/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
index 7cc1aab..f021845 100644
--- a/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
+++ b/core/src/main/java/org/apache/struts2/views/util/ContextUtil.java
@@ -61,25 +61,6 @@ public class ContextUtil {
     }
 
     /**
-     * Return true if either Configuration's altSyntax is on or the stack context's useAltSyntax is on
-     *
-     * @param context stack's context
-     * @return boolean
-     */
-    public static boolean isUseAltSyntax(Map<String, Object> context) {
-        // We didn't make altSyntax static cause, if so, struts.configuration.xml.reload will not work
-        // plus the Configuration implementation should cache the properties, which the framework's
-        // configuration implementation does
-        String tagAltSytnax = ActionContext.of(context).getContainer().getInstance(String.class, StrutsConstants.STRUTS_TAG_ALTSYNTAX);
-
-        return "true".equals(tagAltSytnax) || (
-            (context.containsKey("useAltSyntax") &&
-                context.get("useAltSyntax") != null &&
-                "true".equals(context.get("useAltSyntax").toString()))
-        );
-    }
-
-    /**
      * Returns a String for overriding the default templateSuffix if templateSuffix is on the stack
      *
      * @param context stack's context
diff --git a/core/src/main/resources/org/apache/struts2/default.properties b/core/src/main/resources/org/apache/struts2/default.properties
index 3fe298a..1bbe20c 100644
--- a/core/src/main/resources/org/apache/struts2/default.properties
+++ b/core/src/main/resources/org/apache/struts2/default.properties
@@ -122,10 +122,6 @@ struts.mapper.action.prefix.enabled = false
 ### Blocks access to actions in other namespace than current with action: prefix
 struts.mapper.action.prefix.crossNamespaces = false
 
-### use alternative syntax that requires %{} in most places
-### to evaluate expressions for String attributes for tags
-struts.tag.altSyntax=true
-
 ### when set to true, Struts will act much more friendly for developers. This
 ### includes:
 ### - struts.i18n.reload = true
diff --git a/core/src/test/java/org/apache/struts2/util/ComponentUtilsTest.java b/core/src/test/java/org/apache/struts2/util/ComponentUtilsTest.java
index 41a25a3..568acea 100644
--- a/core/src/test/java/org/apache/struts2/util/ComponentUtilsTest.java
+++ b/core/src/test/java/org/apache/struts2/util/ComponentUtilsTest.java
@@ -18,67 +18,22 @@
  */
 package org.apache.struts2.util;
 
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
-import com.opensymphony.xwork2.inject.ContainerBuilder;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.util.location.LocatableProperties;
-import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsInternalTestCase;
 
 public class ComponentUtilsTest extends StrutsInternalTestCase {
 
-    public void testStripExpression() throws Exception {
+    public void testStripExpression() {
         // given
-        ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
         String anExpression = "%{foo}";
 
         // when
-        String actual = ComponentUtils.stripExpressionIfAltSyntax(stack, anExpression);
+        String actual = ComponentUtils.stripExpression(anExpression);
 
         // then
         assertEquals(actual, "foo");
     }
 
-    public void testNoStripExpressionIfNoAltSyntax() throws Exception {
-        // given
-        loadConfigurationProviders(new MockConfigurationProvider());
-        ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
-        String anExpression = "%{foo}";
-
-        // when
-        String actual = ComponentUtils.stripExpressionIfAltSyntax(stack, anExpression);
-
-        // then
-        assertEquals(actual, "%{foo}");
-    }
-
-    public void testAltSyntaxIsTrue() throws Exception {
-        // given
-        ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
-
-        // when
-        boolean actual = ComponentUtils.altSyntax(stack);
-
-        // then
-        assertTrue(actual);
-    }
-
-    public void testAltSyntaxIsFalse() throws Exception {
-        // given
-        loadConfigurationProviders(new MockConfigurationProvider());
-        ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
-
-        // when
-        boolean actual = ComponentUtils.altSyntax(stack);
-
-        // then
-        assertFalse(actual);
-    }
-
-    public void testIsExpressionIsTrue() throws Exception {
+    public void testIsExpressionIsTrue() {
         // given
         String anExpression = "%{foo}";
 
@@ -89,7 +44,7 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
         assertTrue(actual);
     }
 
-    public void testIsExpressionIsFalseWhenCombined() throws Exception {
+    public void testIsExpressionIsFalseWhenCombined() {
         // given
         String anExpression = "bar%{foo}";
 
@@ -100,7 +55,7 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
         assertFalse(actual);
     }
 
-    public void testIsExpressionIsFalse() throws Exception {
+    public void testIsExpressionIsFalse() {
         // given
         String anExpression = "foo";
 
@@ -111,11 +66,11 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
         assertFalse(actual);
     }
 
-    public void testIsExpressionIsFalseWhenNull() throws Exception {
+    public void testIsExpressionIsFalseWhenNull() {
         assertFalse(ComponentUtils.isExpression(null));
     }
 
-    public void testContainsExpressionIsTrue() throws Exception {
+    public void testContainsExpressionIsTrue() {
         // given
         String anExpression = "%{foo}";
 
@@ -126,7 +81,7 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
         assertTrue(actual);
     }
 
-    public void testIsContainsIsTrueWhenCombined() throws Exception {
+    public void testIsContainsIsTrueWhenCombined() {
         // given
         String anExpression = "bar%{foo}";
 
@@ -137,7 +92,7 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
         assertTrue(actual);
     }
 
-    public void testContainsExpressionIsFalse() throws Exception {
+    public void testContainsExpressionIsFalse() {
         // given
         String anExpression = "foo";
 
@@ -148,27 +103,7 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
         assertFalse(actual);
     }
 
-    public void testContainsExpressionIsFalseWhenNull() throws Exception {
+    public void testContainsExpressionIsFalseWhenNull() {
         assertFalse(ComponentUtils.containsExpression(null));
     }
 }
-
-class MockConfigurationProvider implements ConfigurationProvider {
-
-    public void destroy() {
-    }
-
-    public void init(Configuration configuration) throws ConfigurationException {
-    }
-
-    public boolean needsReload() {
-        return false;
-    }
-
-    public void loadPackages() throws ConfigurationException {
-    }
-
-    public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
-        builder.constant(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");
-    }
-}
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
index 450b709..f37431a 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/PropertyTagTest.java
@@ -18,23 +18,18 @@
  */
 package org.apache.struts2.views.jsp;
 
-import java.util.HashMap;
-
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsInternalTestCase;
-
 import com.mockobjects.servlet.MockJspWriter;
 import com.mockobjects.servlet.MockPageContext;
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.StrutsInternalTestCase;
+
+import javax.servlet.jsp.JspException;
 
 
 /**
  * PropertyTag test case.
- *
  */
 public class PropertyTagTest extends StrutsInternalTestCase {
 
@@ -163,8 +158,6 @@ public class PropertyTagTest extends StrutsInternalTestCase {
 
     public void testWithAltSyntax1() throws Exception {
         // setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
-
         Foo foo = new Foo();
         foo.setTitle("tm_jee");
         stack.push(foo);
@@ -193,27 +186,27 @@ public class PropertyTagTest extends StrutsInternalTestCase {
 
     public void testEscapeJavaScript() throws Exception {
         // setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
-
         Foo foo = new Foo();
-        foo.setTitle("\t\b\n\f\r\"\'/\\");
+        foo.setTitle("\t\b\n\f\r\"'/\\");
         stack.push(foo);
 
         MockJspWriter jspWriter = new MockJspWriter();
-        jspWriter.setExpectedData("Foo is: \\t\\b\\n\\f\\r\\\"\\\'\\/\\\\");
+        jspWriter.setExpectedData("Foo is: \\t\\b\\n\\f\\r\\\"\\'\\/\\\\");
 
         MockPageContext pageContext = new MockPageContext();
         pageContext.setJspWriter(jspWriter);
         pageContext.setRequest(request);
 
         // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setEscapeHtml(false);
-        tag.setEscapeJavaScript(true);    
-        tag.setPageContext(pageContext);
-        tag.setValue("%{formatTitle()}");
-        tag.doStartTag();
-        tag.doEndTag();}
+        {
+            PropertyTag tag = new PropertyTag();
+            tag.setEscapeHtml(false);
+            tag.setEscapeJavaScript(true);
+            tag.setPageContext(pageContext);
+            tag.setValue("%{formatTitle()}");
+            tag.doStartTag();
+            tag.doEndTag();
+        }
 
         // verify test
         request.verify();
@@ -221,10 +214,8 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.verify();
     }
 
-     public void testEscapeXml() throws Exception {
+    public void testEscapeXml() throws Exception {
         // setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
-
         Foo foo = new Foo();
         foo.setTitle("<>'\"&");
         stack.push(foo);
@@ -237,13 +228,15 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.setRequest(request);
 
         // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setEscapeHtml(false);
-        tag.setEscapeXml(true);
-        tag.setPageContext(pageContext);
-        tag.setValue("%{formatTitle()}");
-        tag.doStartTag();
-        tag.doEndTag();}
+        {
+            PropertyTag tag = new PropertyTag();
+            tag.setEscapeHtml(false);
+            tag.setEscapeXml(true);
+            tag.setPageContext(pageContext);
+            tag.setValue("%{formatTitle()}");
+            tag.doStartTag();
+            tag.doEndTag();
+        }
 
         // verify test
         request.verify();
@@ -251,10 +244,8 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.verify();
     }
 
-     public void testEscapeCsv() throws Exception {
+    public void testEscapeCsv() throws Exception {
         // setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
-
         Foo foo = new Foo();
         foo.setTitle("\"something,\",\"");
         stack.push(foo);
@@ -267,13 +258,15 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.setRequest(request);
 
         // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setEscapeHtml(false);
-        tag.setEscapeCsv(true);
-        tag.setPageContext(pageContext);
-        tag.setValue("%{formatTitle()}");
-        tag.doStartTag();
-        tag.doEndTag();}
+        {
+            PropertyTag tag = new PropertyTag();
+            tag.setEscapeHtml(false);
+            tag.setEscapeCsv(true);
+            tag.setPageContext(pageContext);
+            tag.setValue("%{formatTitle()}");
+            tag.doStartTag();
+            tag.doEndTag();
+        }
 
         // verify test
         request.verify();
@@ -283,8 +276,6 @@ public class PropertyTagTest extends StrutsInternalTestCase {
 
     public void testWithAltSyntax2() throws Exception {
         // setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "true");}});
-
         Foo foo = new Foo();
         foo.setTitle("tm_jee");
         stack.push(foo);
@@ -297,11 +288,13 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.setRequest(request);
 
         // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("formatTitle()");
-        tag.doStartTag();
-        tag.doEndTag();}
+        {
+            PropertyTag tag = new PropertyTag();
+            tag.setPageContext(pageContext);
+            tag.setValue("formatTitle()");
+            tag.doStartTag();
+            tag.doEndTag();
+        }
 
         // verify test
         request.verify();
@@ -311,8 +304,6 @@ public class PropertyTagTest extends StrutsInternalTestCase {
 
     public void testWithoutAltSyntax1() throws Exception {
         //      setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");}});
-
         Foo foo = new Foo();
         foo.setTitle("tm_jee");
         stack.push(foo);
@@ -325,11 +316,13 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.setRequest(request);
 
         // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("formatTitle()");
-        tag.doStartTag();
-        tag.doEndTag();}
+        {
+            PropertyTag tag = new PropertyTag();
+            tag.setPageContext(pageContext);
+            tag.setValue("formatTitle()");
+            tag.doStartTag();
+            tag.doEndTag();
+        }
 
         // verify test
         request.verify();
@@ -340,8 +333,6 @@ public class PropertyTagTest extends StrutsInternalTestCase {
 
     public void testWithoutAltSyntax2() throws Exception {
         //      setups
-        initDispatcher(new HashMap() {{ put(StrutsConstants.STRUTS_TAG_ALTSYNTAX, "false");}});
-
         Foo foo = new Foo();
         foo.setTitle("tm_jee");
         stack.push(foo);
@@ -353,11 +344,13 @@ public class PropertyTagTest extends StrutsInternalTestCase {
         pageContext.setRequest(request);
 
         // test
-        {PropertyTag tag = new PropertyTag();
-        tag.setPageContext(pageContext);
-        tag.setValue("%{formatTitle()}");
-        tag.doStartTag();
-        tag.doEndTag();}
+        {
+            PropertyTag tag = new PropertyTag();
+            tag.setPageContext(pageContext);
+            tag.setValue("%{formatTitle()}");
+            tag.doStartTag();
+            tag.doEndTag();
+        }
 
         // verify test
         request.verify();
@@ -373,7 +366,7 @@ public class PropertyTagTest extends StrutsInternalTestCase {
     }
 
 
-    public class Foo {
+    public static class Foo {
         private String title;
 
         public void setTitle(String title) {
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
index 79abd4c..ef3484c 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/FormTagTest.java
@@ -18,31 +18,21 @@
  */
 package org.apache.struts2.views.jsp.ui;
 
-import com.opensymphony.xwork2.*;
-import com.opensymphony.xwork2.config.RuntimeConfiguration;
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionProxy;
 import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.InterceptorMapping;
-import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.inject.Scope.Strategy;
-import com.opensymphony.xwork2.validator.ValidationInterceptor;
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.TestAction;
 import org.apache.struts2.TestConfigurationProvider;
-import org.apache.struts2.components.Form;
-import org.apache.struts2.dispatcher.Dispatcher;
 import org.apache.struts2.dispatcher.mapper.ActionMapper;
 import org.apache.struts2.dispatcher.mapper.DefaultActionMapper;
 import org.apache.struts2.views.jsp.AbstractUITagTest;
 import org.apache.struts2.views.jsp.ActionTag;
 import org.easymock.EasyMock;
 
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import static org.apache.struts2.views.jsp.AbstractUITagTest.normalize;
 
 
 /**
@@ -50,8 +40,8 @@ import static org.apache.struts2.views.jsp.AbstractUITagTest.normalize;
  */
 public class FormTagTest extends AbstractUITagTest {
 
-    
-     public void testFormWithActionAttributeContainingQueryString() throws Exception {
+
+    public void testFormWithActionAttributeContainingQueryString() throws Exception {
         FormTag tag = new FormTag();
         tag.setPageContext(pageContext);
         tag.setName("myForm");
@@ -66,10 +56,10 @@ public class FormTagTest extends AbstractUITagTest {
 
         tag.doStartTag();
         tag.doEndTag();
-        
+
         verify(FormTag.class.getResource("Formtag-26.txt"));
     }
-    
+
     public void testFormWithActionAttributeContainingBothActionAndMethod() throws Exception {
         FormTag tag = new FormTag();
         tag.setPageContext(pageContext);
@@ -114,7 +104,7 @@ public class FormTagTest extends AbstractUITagTest {
 
         verify(FormTag.class.getResource("Formtag-13.txt"));
     }
-    
+
     public void testFormWithActionAttributeContainingBothActionAndDMIMethod() throws Exception {
         FormTag tag = new FormTag();
         tag.setPageContext(pageContext);
@@ -126,13 +116,13 @@ public class FormTagTest extends AbstractUITagTest {
         tag.setTitle("mytitle");
         tag.setOnsubmit("submitMe()");
 
-        ((DefaultActionMapper)container.getInstance(ActionMapper.class)).setAllowDynamicMethodCalls("true");
+        ((DefaultActionMapper) container.getInstance(ActionMapper.class)).setAllowDynamicMethodCalls("true");
 
         tag.doStartTag();
         tag.doEndTag();
 
         verify(FormTag.class.getResource("Formtag-23.txt"));
-    }    
+    }
 
     public void testFormWithFocusElement() throws Exception {
         FormTag tag = new FormTag();
@@ -208,7 +198,7 @@ public class FormTagTest extends AbstractUITagTest {
         verify(FormTag.class.getResource("Formtag-29.txt"));
     }
 
-     public void testFormNoNameOrId() throws Exception {
+    public void testFormNoNameOrId() throws Exception {
 
         request.setupGetServletPath("/testAction");
 
@@ -330,7 +320,7 @@ public class FormTagTest extends AbstractUITagTest {
         verify(FormTag.class.getResource("Formtag-22.txt"));
     }
 
-/**
+    /**
      * Tests the numbers are formatted correctly to not break the javascript, using doubles
      */
     public void testFormWithCustomOnsubmitEnabledWithValidateEnabled4() throws Exception {
@@ -420,7 +410,7 @@ public class FormTagTest extends AbstractUITagTest {
      * </p>
      */
     public void testFormTagWithDifferentActionExtension() throws Exception {
-        initDispatcher(new HashMap<String,String>(){{ 
+        initDispatcher(new HashMap<String, String>() {{
             put(StrutsConstants.STRUTS_ACTION_EXTENSION, "jspa");
             put("configProviders", TestConfigurationProvider.class.getName());
         }});
@@ -630,7 +620,7 @@ public class FormTagTest extends AbstractUITagTest {
 
     public void testFormWithActionAndExtension() throws Exception {
         request.setupGetServletPath("/BLA");
-        
+
         FormTag tag = new FormTag();
         tag.setPageContext(pageContext);
         tag.setAction("/testNamespace/testNamespaceAction.jspa");
@@ -684,7 +674,7 @@ public class FormTagTest extends AbstractUITagTest {
 
         verify(FormTag.class.getResource("Formtag-27.txt"));
     }
-    
+
     public void testFormWithTopLabelPositionCssXhtml() throws Exception {
         FormTag form = new FormTag();
         form.setTheme("css_xhtml");
@@ -725,7 +715,7 @@ public class FormTagTest extends AbstractUITagTest {
 
         verify(FormTag.class.getResource("Formtag-28.txt"));
     }
-    
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
diff --git a/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java b/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java
deleted file mode 100755
index 9a79cb8..0000000
--- a/core/src/test/java/org/apache/struts2/views/util/ContextUtilTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.struts2.views.util;
-
-import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.StrutsInternalTestCase;
-
-import com.mockobjects.dynamic.C;
-import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.util.ValueStack;
-
-/**
- * Test case for ContextUtil
- *
- */
-public class ContextUtilTest extends StrutsInternalTestCase {
-
-    private void setAltSyntax(ValueStack stack, String val) {
-        Mock container = new Mock(Container.class);
-        container.expectAndReturn("getInstance", C.args(C.eq(String.class), C.eq(StrutsConstants.STRUTS_TAG_ALTSYNTAX)), val);
-        stack.getActionContext().withContainer((Container) container.proxy());
-    }
-    
-    public void testAltSyntaxMethod1() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", "true");
-
-        setAltSyntax(stack, "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-
-    public void testAltSyntaxMethod2() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", "false");
-
-        setAltSyntax(stack, "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-
-    public void testAltSyntaxMethod3() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", "true");
-
-        setAltSyntax(stack, "false");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-
-    public void testAltSyntaxMethod4() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", "false");
-
-        setAltSyntax(stack, "false");
-        assertFalse(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-
-    //========================================================
-
-    public void testAltSyntaxMethod5() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.TRUE);
-
-        setAltSyntax(stack, "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    public void testAltSyntaxMethod6() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.FALSE);
-
-        setAltSyntax(stack, "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    public void testAltSyntaxMethod7() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.TRUE);
-
-        setAltSyntax(stack, "false");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-    public void testAltSyntaxMethod8() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", Boolean.FALSE);
-
-        setAltSyntax(stack, "false");
-        assertFalse(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-
-    // ==========================================
-    public void testAltSyntaxMethod9() throws Exception {
-        ValueStack stack = ActionContext.getContext().getValueStack();
-        stack.getContext().put("useAltSyntax", null);
-
-        setAltSyntax(stack, "true");
-        assertTrue(ContextUtil.isUseAltSyntax(stack.getContext()));
-    }
-}
diff --git a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
index 74a0443..7c3a9c4 100644
--- a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
+++ b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AbstractTagHandler.java
@@ -24,7 +24,6 @@ import org.apache.struts2.components.template.TemplateRenderingContext;
 import org.apache.struts2.util.ComponentUtils;
 import org.apache.struts2.views.java.Attributes;
 import org.apache.struts2.views.java.TagHandler;
-import org.apache.struts2.views.util.ContextUtil;
 
 import java.io.IOException;
 
@@ -32,7 +31,6 @@ public abstract class AbstractTagHandler implements TagHandler {
 
     protected TagHandler nextTagHandler;
     protected TemplateRenderingContext context;
-    protected boolean altSyntax;
 
     public void characters(String text) throws IOException {
         characters(text, true);
@@ -64,7 +62,6 @@ public abstract class AbstractTagHandler implements TagHandler {
 
     public void setup(TemplateRenderingContext context) {
         this.context = context;
-        this.altSyntax = ContextUtil.isUseAltSyntax(context.getStack().getContext());
         processParams();
     }
 
@@ -72,7 +69,11 @@ public abstract class AbstractTagHandler implements TagHandler {
     }
 
     protected String findString(String expr) {
-        return (String) findValue(expr, String.class);
+        if (expr == null) {
+            return null;
+        }
+        ValueStack stack = context.getStack();
+        return TextParseUtil.translateVariables('%', expr, stack);
     }
 
     protected Object findValue(String expr) {
@@ -81,16 +82,7 @@ public abstract class AbstractTagHandler implements TagHandler {
         }
 
         ValueStack stack = context.getStack();
-        return stack.findValue(ComponentUtils.stripExpressionIfAltSyntax(stack, expr));
+        return stack.findValue(ComponentUtils.stripExpression(expr));
     }
 
-    private Object findValue(String expr, Class toType) {
-        ValueStack stack = context.getStack();
-
-        if (altSyntax && toType == String.class) {
-            return TextParseUtil.translateVariables('%', expr, stack);
-        } else {
-            return stack.findValue(ComponentUtils.stripExpressionIfAltSyntax(stack, expr), toType);
-        }
-    }
 }
diff --git a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/DynamicAttributesHandler.java b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/DynamicAttributesHandler.java
index 7568c1c..150b412 100644
--- a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/DynamicAttributesHandler.java
+++ b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/DynamicAttributesHandler.java
@@ -42,7 +42,7 @@ public class DynamicAttributesHandler extends AbstractTagHandler {
     protected void processDynamicAttributes(Attributes a) {
         Map<String, String> dynamicAttributes = (Map<String, String>) context.getParameters().get("dynamicAttributes");
         for (Map.Entry<String, String> entry : dynamicAttributes.entrySet()) {
-            if (altSyntax && ComponentUtils.isExpression(entry.getValue())) {
+            if (ComponentUtils.isExpression(entry.getValue())) {
                 String value = ObjectUtils.defaultIfNull(findString(entry.getValue()), entry.getValue());
                 a.put(entry.getKey(), value);
             } else {
diff --git a/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java b/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java
index f35c03e..3c6c37f 100644
--- a/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java
+++ b/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java
@@ -28,7 +28,6 @@ import com.opensymphony.xwork2.util.OgnlTextParser;
 import com.opensymphony.xwork2.util.TextParser;
 import com.opensymphony.xwork2.util.ValueStack;
 import junit.framework.TestCase;
-import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.components.Component;
 import org.apache.struts2.components.UIBean;
 import org.apache.struts2.components.template.Template;
@@ -113,7 +112,6 @@ public abstract class AbstractTest extends TestCase {
 
         Container container = createNiceMock(Container.class);
         XWorkConverter converter = new ConverterEx();
-        expect(container.getInstance(String.class, StrutsConstants.STRUTS_TAG_ALTSYNTAX)).andReturn("true").anyTimes();
         expect(container.getInstance(XWorkConverter.class)).andReturn(converter).anyTimes();
         TextParser parser = new OgnlTextParser();
         expect(container.getInstance(TextParser.class)).andReturn(parser).anyTimes();