From de8c649f83bb95ee38f04998ea0f7bbcd79d50da Mon Sep 17 00:00:00 2001 From: "Donald J. Brown" Date: Fri, 8 Dec 2006 05:52:10 +0000 Subject: [PATCH] Moving sitemesh decorator over to sitemesh plugin, changing debug interceptor to only store stack in session when first invoked, documentation updates to code behind plugin WW-1546 WW-1483 git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@483839 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/webapp/WEB-INF/sitemesh.xml | 2 +- .../debugging/DebuggingInterceptor.java | 14 +++++++++++++- .../codebehind/CodebehindUnknownHandler.java | 3 +++ .../src/main/resources/struts-plugin.xml | 2 +- .../struts2}/sitemesh/NoneDecoratorMapper.java | 18 +++++++++++------- 5 files changed, 29 insertions(+), 10 deletions(-) rename {apps/showcase/src/main/java/org/apache/struts2/showcase => plugins/sitemesh/src/main/java/org/apache/struts2}/sitemesh/NoneDecoratorMapper.java (87%) diff --git a/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml b/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml index cfd1b3449..35d70168c 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml +++ b/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml @@ -42,7 +42,7 @@ - + diff --git a/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java index a1562d78e..10b00752e 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java @@ -40,6 +40,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; +import org.apache.struts2.views.freemarker.FreemarkerManager; import org.apache.struts2.views.freemarker.FreemarkerResult; import org.apache.struts2.StrutsConstants; @@ -105,11 +106,19 @@ public class DebuggingInterceptor implements Interceptor { private boolean enableXmlWithConsole = false; private boolean devMode; + private FreemarkerManager freemarkerManager; + + private boolean consoleEnabled = false; @Inject(StrutsConstants.STRUTS_DEVMODE) public void setDevMode(String mode) { this.devMode = "true".equals(mode); } + + @Inject + public void setFreemarkerManager(FreemarkerManager mgr) { + this.freemarkerManager = mgr; + } /** * Unused. @@ -145,6 +154,7 @@ public class DebuggingInterceptor implements Interceptor { } }); } else if (CONSOLE_MODE.equals(type)) { + consoleEnabled = true; inv.addPreResultListener( new PreResultListener() { public void beforeResult(ActionInvocation inv, String actionResult) { @@ -160,6 +170,7 @@ public class DebuggingInterceptor implements Interceptor { ActionContext.getContext().put("debugXML", xml); FreemarkerResult result = new FreemarkerResult(); + result.setFreemarkerManager(freemarkerManager); result.setContentType("text/html"); result.setLocation("/org/apache/struts2/interceptor/debugging/console.ftl"); result.setParse(false); @@ -175,6 +186,7 @@ public class DebuggingInterceptor implements Interceptor { ValueStack stack = (ValueStack) ctx.getSession().get(SESSION_KEY); String cmd = getParameter(EXPRESSION_PARAM); + ServletActionContext.getRequest().setAttribute("decorator", "none"); HttpServletResponse res = ServletActionContext.getResponse(); res.setContentType("text/plain"); @@ -193,7 +205,7 @@ public class DebuggingInterceptor implements Interceptor { try { return inv.invoke(); } finally { - if (devMode) { + if (devMode && consoleEnabled) { final ActionContext ctx = ActionContext.getContext(); ctx.getSession().put(SESSION_KEY, ctx.get(ActionContext.VALUE_STACK)); } diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java b/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java index 2233a697a..747b356f3 100644 --- a/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java +++ b/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java @@ -48,6 +48,9 @@ import com.opensymphony.xwork2.config.entities.ResultTypeConfig; import com.opensymphony.xwork2.config.providers.InterceptorBuilder; import com.opensymphony.xwork2.inject.Inject; +/** + * Uses code-behind conventions to solve the two unknown problems. + */ public class CodebehindUnknownHandler implements UnknownHandler { protected String defaultPackageName = "codebehind-default"; diff --git a/plugins/codebehind/src/main/resources/struts-plugin.xml b/plugins/codebehind/src/main/resources/struts-plugin.xml index 3d1f2cac5..1bc6de17f 100644 --- a/plugins/codebehind/src/main/resources/struts-plugin.xml +++ b/plugins/codebehind/src/main/resources/struts-plugin.xml @@ -3,7 +3,7 @@ - + diff --git a/apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/NoneDecoratorMapper.java b/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java similarity index 87% rename from apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/NoneDecoratorMapper.java rename to plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java index cfdda0612..194f2d297 100644 --- a/apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/NoneDecoratorMapper.java +++ b/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id: FreeMarkerPageFilter.java 475637 2006-11-16 08:32:03Z mrdon $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -18,15 +18,19 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.struts2.showcase.sitemesh; +package org.apache.struts2.sitemesh; + +import com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper; +import com.opensymphony.module.sitemesh.Decorator; +import com.opensymphony.module.sitemesh.Page; import javax.servlet.http.HttpServletRequest; -import com.opensymphony.module.sitemesh.Decorator; -import com.opensymphony.module.sitemesh.Page; -import com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper; - +/** + * Won't decorate the output if it finds a "decorator" flag in the request + */ public class NoneDecoratorMapper extends AbstractDecoratorMapper { + public Decorator getDecorator(HttpServletRequest req, Page page) { if ("none".equals(req.getAttribute("decorator"))) { return null; @@ -34,4 +38,4 @@ public class NoneDecoratorMapper extends AbstractDecoratorMapper { return super.getDecorator(req, page); } -} +} \ No newline at end of file