You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ku...@apache.org on 2023/11/13 12:58:50 UTC
(struts) 01/01: WW-5363 Velocity: read chained contexts before ValueStack
This is an automated email from the ASF dual-hosted git repository.
kusal pushed a commit to branch issue/WW-5363-velocity-order
in repository https://gitbox.apache.org/repos/asf/struts.git
commit e9c996a17ebf05ec2bde8f2516c8eaa608268c85
Author: Kusal Kithul-Godage <gi...@kusal.io>
AuthorDate: Mon Nov 13 23:58:41 2023 +1100
WW-5363 Velocity: read chained contexts before ValueStack
---
.../views/velocity/StrutsVelocityContext.java | 49 +++++++++++++++-------
1 file changed, 33 insertions(+), 16 deletions(-)
diff --git a/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
index cca2b5dc3..96c213252 100644
--- a/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/StrutsVelocityContext.java
@@ -24,6 +24,7 @@ import org.apache.velocity.VelocityContext;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.function.Function;
public class StrutsVelocityContext extends VelocityContext {
@@ -54,7 +55,7 @@ public class StrutsVelocityContext extends VelocityContext {
/**
* @deprecated please use {@link #StrutsVelocityContext(List, ValueStack)}
*/
- @Deprecated()
+ @Deprecated
public StrutsVelocityContext(VelocityContext[] chainedContexts, ValueStack stack) {
this(new ArrayList<>(Arrays.asList(chainedContexts)), stack);
}
@@ -64,28 +65,44 @@ public class StrutsVelocityContext extends VelocityContext {
}
public Object internalGet(String key) {
- Object val = super.internalGet(key);
- if (val != null) {
- return val;
- }
- if (stack != null) {
- val = stack.findValue(key);
+ return chainedGets(key, super::internalGet, this::chainedContextGet, this::stackGet, this::stackContextGet);
+ }
+
+ @SafeVarargs
+ protected static Object chainedGets(String key, Function<String, Object> ...contextGets) {
+ for (Function<String, Object> contextGet : contextGets) {
+ Object val = contextGet.apply(key);
if (val != null) {
return val;
}
- val = stack.getContext().get(key);
+ }
+ return null;
+ }
+
+ protected Object stackGet(String key) {
+ if (stack == null) {
+ return null;
+ }
+ return stack.findValue(key);
+ }
+
+ protected Object stackContextGet(String key) {
+ if (stack == null) {
+ return null;
+ }
+ return stack.getContext().get(key);
+ }
+
+ protected Object chainedContextGet(String key) {
+ if (chainedContexts == null) {
+ return null;
+ }
+ for (VelocityContext chainedContext : chainedContexts) {
+ Object val = chainedContext.internalGet(key);
if (val != null) {
return val;
}
}
- if (chainedContexts != null) {
- for (VelocityContext chainedContext : chainedContexts) {
- val = chainedContext.internalGet(key);
- if (val != null) {
- return val;
- }
- }
- }
return null;
}
}