Author: mrdon Date: Thu Dec 7 21:52:10 2006 New Revision: 483839 URL: http://svn.apache.org/viewvc?view=rev&rev=483839 Log: 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
Added: struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java Removed: struts/struts2/trunk/apps/showcase/src/main/java/org/apache/struts2/showcase/sitemesh/ Modified: struts/struts2/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java struts/struts2/trunk/plugins/codebehind/src/main/resources/struts-plugin.xml Modified: struts/struts2/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml URL: http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml?view=diff&rev=483839&r1=483838&r2=483839 ============================================================================== --- struts/struts2/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml (original) +++ struts/struts2/trunk/apps/showcase/src/main/webapp/WEB-INF/sitemesh.xml Thu Dec 7 21:52:10 2006 @@ -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"> Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java?view=diff&rev=483839&r1=483838&r2=483839 ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/debugging/DebuggingInterceptor.java Thu Dec 7 21:52:10 2006 @@ -40,6 +40,7 @@ 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 @@ 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 @@ } }); } else if (CONSOLE_MODE.equals(type)) { + consoleEnabled = true; inv.addPreResultListener( new PreResultListener() { public void beforeResult(ActionInvocation inv, String actionResult) { @@ -160,6 +170,7 @@ 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 @@ 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 @@ 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)); } Modified: struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java?view=diff&rev=483839&r1=483838&r2=483839 ============================================================================== --- struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java (original) +++ struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java Thu Dec 7 21:52:10 2006 @@ -48,6 +48,9 @@ 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"; Modified: struts/struts2/trunk/plugins/codebehind/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/main/resources/struts-plugin.xml?view=diff&rev=483839&r1=483838&r2=483839 ============================================================================== --- struts/struts2/trunk/plugins/codebehind/src/main/resources/struts-plugin.xml (original) +++ struts/struts2/trunk/plugins/codebehind/src/main/resources/struts-plugin.xml Thu Dec 7 21:52:10 2006 @@ -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" /> Added: struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java?view=auto&rev=483839 ============================================================================== --- struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java (added) +++ struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/NoneDecoratorMapper.java Thu Dec 7 21:52:10 2006 @@ -0,0 +1,41 @@ +/* + * $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 + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +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; + +/** + * 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; + } + + return super.getDecorator(req, page); + } +} \ No newline at end of file