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
This commit is contained in:
Donald J. Brown
2006-12-08 05:52:10 +00:00
parent 17aaf3cb1e
commit de8c649f83
5 changed files with 29 additions and 10 deletions
@@ -42,7 +42,7 @@
<mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
</mapper>
<mapper class="org.apache.struts2.showcase.sitemesh.NoneDecoratorMapper">
<mapper class="org.apache.struts2.sitemesh.NoneDecoratorMapper">
</mapper>
<mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
@@ -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));
}
@@ -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";
@@ -3,7 +3,7 @@
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<bean type="com.opensymphony.xwork2.UnknownHandler" class="org.apache.struts2.codebehind.CodebehindUnknownHandler" />
@@ -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);
}
}
}