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 <lukaszlen...@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 (&) 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 @@ 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();