Merge pull request #453 from apache/WW-3877-removes-alt-syntax
[WW-3877] Drops altSyntax option
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 @@
/** 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.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.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 @@
* 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 @@
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 @@
/**
* Constructor.
*
- * @param stack OGNL value stack.
+ * @param stack OGNL value stack.
*/
public Component(ValueStack stack) {
this.stack = stack;
@@ -83,10 +86,11 @@
/**
* 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 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 @@
/**
* 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 @@
* 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 @@
* 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 @@
* 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 @@
/**
* 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 @@
/**
* 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 @@
* 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 @@
* <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 @@
* 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 @@
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
+ * @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
- * 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 @@
* 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 @@
* 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 @@
/**
* 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 (&) be escaped to &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 (&) be escaped to &amp;
* @return the action url.
*/
protected String determineActionURL(String action, String namespace, String method,
@@ -420,10 +420,11 @@
/**
* 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 @@
* 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 @@
/**
* 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 @@
/**
* 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 @@
* 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 @@
/**
* Overwrite to set if body should be used.
+ *
* @return always false for this component.
*/
public boolean usesBody() {
@@ -532,9 +537,8 @@
/**
* 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 @@
* @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 @@
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 @@
* <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 @@
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 @@
}
}
- Class valueClazz = getValueClassType();
+ Class<?> valueClazz = getValueClassType();
if (valueClazz != null) {
if (doubleValue != null) {
@@ -187,10 +186,9 @@
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 @@
}
}
- @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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 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 @@
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 @@
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 @@
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 @@
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 4dd23ca..26484f2 100644
--- a/core/src/main/java/org/apache/struts2/components/ListUIBean.java
+++ b/core/src/main/java/org/apache/struts2/components/ListUIBean.java
@@ -105,7 +105,7 @@
}
if (listKey != null) {
- listKey = stripExpressionIfAltSyntax(listKey);
+ listKey = stripExpression(listKey);
addParameter("listKey", listKey);
} else if (value instanceof Map) {
addParameter("listKey", "key");
@@ -114,12 +114,12 @@
}
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");
@@ -128,7 +128,7 @@
}
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 @@
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 @@
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 @@
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 @@
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 @@
return true;
}
- protected Class getValueClassType() {
+ protected Class<?> getValueClassType() {
return String.class;
}
@@ -948,7 +947,7 @@
}
}
- 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 @@
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 @@
}
}
- @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 @@
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 @@
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 @@
/**
* 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 @@
}
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 @@
}
/**
- * 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 @@
### 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 @@
assertTrue(actual);
}
- public void testIsExpressionIsFalseWhenCombined() throws Exception {
+ public void testIsExpressionIsFalseWhenCombined() {
// given
String anExpression = "bar%{foo}";
@@ -100,7 +55,7 @@
assertFalse(actual);
}
- public void testIsExpressionIsFalse() throws Exception {
+ public void testIsExpressionIsFalse() {
// given
String anExpression = "foo";
@@ -111,11 +66,11 @@
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 @@
assertTrue(actual);
}
- public void testIsContainsIsTrueWhenCombined() throws Exception {
+ public void testIsContainsIsTrueWhenCombined() {
// given
String anExpression = "bar%{foo}";
@@ -137,7 +92,7 @@
assertTrue(actual);
}
- public void testContainsExpressionIsFalse() throws Exception {
+ public void testContainsExpressionIsFalse() {
// given
String anExpression = "foo";
@@ -148,27 +103,7 @@
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 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 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 @@
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 @@
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 @@
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 @@
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 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 @@
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 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 @@
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 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 @@
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 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 @@
*/
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 @@
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 @@
verify(FormTag.class.getResource("Formtag-13.txt"));
}
-
+
public void testFormWithActionAttributeContainingBothActionAndDMIMethod() throws Exception {
FormTag tag = new FormTag();
tag.setPageContext(pageContext);
@@ -126,13 +116,13 @@
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 @@
verify(FormTag.class.getResource("Formtag-29.txt"));
}
- public void testFormNoNameOrId() throws Exception {
+ public void testFormNoNameOrId() throws Exception {
request.setupGetServletPath("/testAction");
@@ -330,7 +320,7 @@
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 @@
* </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 void testFormWithActionAndExtension() throws Exception {
request.setupGetServletPath("/BLA");
-
+
FormTag tag = new FormTag();
tag.setPageContext(pageContext);
tag.setAction("/testNamespace/testNamespaceAction.jspa");
@@ -684,7 +674,7 @@
verify(FormTag.class.getResource("Formtag-27.txt"));
}
-
+
public void testFormWithTopLabelPositionCssXhtml() throws Exception {
FormTag form = new FormTag();
form.setTheme("css_xhtml");
@@ -725,7 +715,7 @@
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.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 @@
protected TagHandler nextTagHandler;
protected TemplateRenderingContext context;
- protected boolean altSyntax;
public void characters(String text) throws IOException {
characters(text, true);
@@ -64,7 +62,6 @@
public void setup(TemplateRenderingContext context) {
this.context = context;
- this.altSyntax = ContextUtil.isUseAltSyntax(context.getStack().getContext());
processParams();
}
@@ -72,7 +69,11 @@
}
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 @@
}
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 @@
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.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 @@
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();