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