mirror of
https://github.com/apache/struts.git
synced 2026-08-07 15:46:57 +00:00
Reduces expression evaluation if there is no expression
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user