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 2024/01/08 09:47:41 UTC
(struts) 01/01: WW-5379 Add one more method to provide Velocity directives with ValueStack
This is an automated email from the ASF dual-hosted git repository.
kusal pushed a commit to branch WW-5379-directives-valuestack
in repository https://gitbox.apache.org/repos/asf/struts.git
commit c5cf3fc28824f33ed2020464e0d9b7e1ea86fb82
Author: Kusal Kithul-Godage <gi...@kusal.io>
AuthorDate: Mon Jan 8 20:47:35 2024 +1100
WW-5379 Add one more method to provide Velocity directives with ValueStack
---
.../views/velocity/components/AbstractDirective.java | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
index 539f64bdd..c662bf5a9 100644
--- a/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
+++ b/plugins/velocity/src/main/java/org/apache/struts2/views/velocity/components/AbstractDirective.java
@@ -18,6 +18,7 @@
*/
package org.apache.struts2.views.velocity.components;
+import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.inject.Container;
import com.opensymphony.xwork2.util.ValueStack;
import org.apache.struts2.ServletActionContext;
@@ -59,11 +60,7 @@ public abstract class AbstractDirective extends Directive {
protected abstract Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res);
public boolean render(InternalContextAdapter ctx, Writer writer, Node node) throws IOException, ResourceNotFoundException, ParseErrorException, MethodInvocationException {
- ValueStack stack = extractValueStack(ctx);
- if (stack == null) {
- // Fallback to assuming the ValueStack was put into the Velocity context (as is by default)
- stack = (ValueStack) ctx.get(ContextUtil.STACK);
- }
+ ValueStack stack = getValueStack(ctx);
HttpServletRequest req = (HttpServletRequest) stack.getContext().get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse res = (HttpServletResponse) stack.getContext().get(ServletActionContext.HTTP_RESPONSE);
Component bean = getBean(stack, req, res);
@@ -84,6 +81,19 @@ public abstract class AbstractDirective extends Directive {
return true;
}
+ protected ValueStack getValueStack(Context context) {
+ ValueStack stack = extractValueStack(context);
+ if (stack == null) {
+ // Fallback to assuming the ValueStack was put into the Velocity context (as is by default)
+ stack = (ValueStack) context.get(ContextUtil.STACK);
+ }
+ if (stack == null) {
+ // Fallback to current ActionContext
+ stack = ActionContext.getContext().getValueStack();
+ }
+ return stack;
+ }
+
private ValueStack extractValueStack(Context context) {
do {
if (context instanceof ValueStackProvider) {