Reduces expression evaluation if there is no expression

This commit is contained in:
Lukasz Lenart
2016-03-06 10:07:06 +01:00
parent 9de0cf4c8b
commit b155532314
4 changed files with 56 additions and 5 deletions
@@ -373,7 +373,11 @@ public class Component {
*/
protected Object findValue(String expr, Class toType) {
if (altSyntax() && toType == String.class) {
return TextParseUtil.translateVariables('%', expr, stack);
if (ComponentUtils.containsExpression(expr)) {
return TextParseUtil.translateVariables('%', expr, stack);
} else {
return expr;
}
} else {
expr = stripExpressionIfAltSyntax(expr);
@@ -40,12 +40,15 @@ public class ComponentUtils {
/**
* Check if object is expression base on altSyntax
*
* @param value to treat as an expression
* @param expr to treat as an expression
* @return true if it is an expression
*/
public static boolean isExpression(Object value) {
String expr = value.toString();
public static boolean isExpression(String expr) {
return expr.startsWith("%{") && expr.endsWith("}");
}
public static boolean containsExpression(String expr) {
return expr.contains("%{") && expr.contains("}");
}
}
@@ -306,7 +306,7 @@ public abstract class AbstractUITag extends ComponentTagSupport implements Dynam
}
public void setDynamicAttribute(String uri, String localName, Object value) throws JspException {
if (ComponentUtils.altSyntax(getStack()) && ComponentUtils.isExpression(value)) {
if (ComponentUtils.altSyntax(getStack()) && ComponentUtils.isExpression(value.toString())) {
dynamicAttributes.put(localName, String.valueOf(ObjectUtils.defaultIfNull(findValue(value.toString()), value)));
} else {
dynamicAttributes.put(localName, value);
@@ -71,6 +71,17 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
assertTrue(actual);
}
public void testIsExpressionIsFalseWhenCombined() throws Exception {
// given
String anExpression = "bar%{foo}";
// when
boolean actual = ComponentUtils.isExpression(anExpression);
// then
assertFalse(actual);
}
public void testIsExpressionIsFalse() throws Exception {
// given
String anExpression = "foo";
@@ -81,6 +92,39 @@ public class ComponentUtilsTest extends StrutsInternalTestCase {
// then
assertFalse(actual);
}
public void testContainsExpressionIsTrue() throws Exception {
// given
String anExpression = "%{foo}";
// when
boolean actual = ComponentUtils.containsExpression(anExpression);
// then
assertTrue(actual);
}
public void testIsContainsIsTrueWhenCombined() throws Exception {
// given
String anExpression = "bar%{foo}";
// when
boolean actual = ComponentUtils.containsExpression(anExpression);
// then
assertTrue(actual);
}
public void testContainsExpressionIsFalse() throws Exception {
// given
String anExpression = "foo";
// when
boolean actual = ComponentUtils.containsExpression(anExpression);
// then
assertFalse(actual);
}
}
class MockConfigurationProvider implements ConfigurationProvider {