Why does the JSP version behave differently? I.e. no reference to the property is necessary to get the action tag result output. This difference isn't clear anywhere in documentation AFAIK.
Also, I want the output of the entire action result. My result may be considerably more complex than a simple date object. Thanks, Derrick From: Maurizio Cucchiara [mailto:maurizio.cucchi...@gmail.com] Sent: Monday, October 04, 2010 11:33 AM To: Struts Users Mailing List Subject: Re: Freemarker sitemesh decorator does not render struts 2.2.1 action tag Hi, I think this is the expected result. In fact the follow line: <@s.action var="dateAction" name="date" namespace="/" executeResult="true" /> initializes a dateAction reference (var) to the invoked action. If you want to see your date you need to add this row <@s.property value="#dateAction.date" /> Did it work in that way before? Maurizio Cucchiara 2010/10/3 Derrick Koes <derrick_k...@skillsoft.com<mailto:derrick_k...@skillsoft.com>> I am upgrading to struts 2.2.1, but realized there is an issue with freemarker sitemesh decorators which use the struts 2 action tag. This is a regression from 2.1.8.1. To demonstrate the issue with a reasonably simple example I deployed the struts2-showcase-2.2.1 sample application. Then, ensuring the web.xml is set up to handle freemarker sitemesh decorators, I created a 'main.ftl' decorator based on the main.jsp decorator included in the app. I modified the decorators.xml to use the main.ftl rather than the main.jsp decorator and restarted the app. Note that the "date" action in the action tag within the freemarker sitemesh decorator runs as the variable usage for the year in the copyright line is correct. However, notice that the header is missing the date (as compared to the jsp version). Any help in further understanding or resolving the issue is appreciated. Below are the relevant files inlined (also attached). web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Struts Showcase Application</display-name> <filter> <filter-name>struts-prepare</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>org.apache.struts2.showcase.person</param-value> </init-param> </filter> <filter> <filter-name>struts-execute</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> </filter> <filter-mapping> <filter-name>struts-prepare</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts-execute</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class> org.apache.myfaces.webapp.StartupServletContextListener </listener-class> </listener> <listener> <listener-class> org.apache.struts2.tiles.StrutsTilesListener </listener-class> </listener> <!-- Chat Example in Showcase --> <listener> <listener-class> org.apache.struts2.showcase.chat.ChatSessionListener </listener-class> </listener> <listener> <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class> </listener> <!-- SNIPPET START: dwr --> <servlet> <servlet-name>dwr</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <!-- JavaServer Faces Servlet Configuration, not used directly --> <servlet> <servlet-name>faces</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>JspSupportServlet</servlet-name> <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Sitemesh Freemarker and Velocity Decorator Servlets. Shares configuration with Struts.--> <servlet> <servlet-name>sitemesh-freemarker</servlet-name> <servlet-class>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</servlet-class> <init-param> <param-name>default_encoding</param-name> <param-value>UTF-8</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>sitemesh-velocity</servlet-name> <servlet-class>org.apache.struts2.sitemesh.VelocityDecoratorServlet</servlet-class> <init-param> <param-name>default_encoding</param-name> <param-value>UTF-8</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- JavaServer Faces Servlet Mapping, not called directly --> <servlet-mapping> <servlet-name>faces</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>dwr</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>sitemesh-freemarker</servlet-name> <url-pattern>*.ftl</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>sitemesh-velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping> <!-- END SNIPPET: dwr --> <!-- SNIPPET START: example.velocity.filter.chain <filter> <filter-name>struts-cleanup</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>org.apache.struts2.sitemesh.VelocityPageFilter</filter-class> </filter> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> END SNIPPET: example.velocity.filter.chain --> <!-- SNIPPET START: example.freemarker.filter.chain <filter> <filter-name>struts-cleanup</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>org.apache.struts2.sitemesh.FreeMarkerPageFilter</filter-class> </filter> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> END SNIPPET: example.freemarker.filter.chain --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>default.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> decorators.xml: <?xml version="1.0" encoding="ISO-8859-1"?> <decorators defaultdir="/WEB-INF/decorators"> <!-- Any urls that are excluded will never be decorated by Sitemesh --> <excludes> <pattern>/debug.jsp</pattern> <pattern>/styles/*</pattern> <pattern>/scripts/*</pattern> <pattern>/images/*</pattern> <pattern>/dojo/*</pattern> <pattern>/struts/*</pattern> <pattern>/ajax/AjaxResult*</pattern> <pattern>/AjaxTest.action</pattern> <pattern>/ajax/remoteforms/AjaxRemoteForm.action</pattern> <pattern>/tags/ui/ajax/*</pattern> <pattern>/chat/ajax/*</pattern> <pattern>/hangman/ajax/*</pattern> <pattern>/nodecorate/*</pattern> </excludes> <decorator name="main" page="main.ftl"> <pattern>/*</pattern> </decorator> <!--<decorator name="panel" page="panel.jsp"/>--> <!--<decorator name="dashedBox" page="dashedBox.jsp"/>--> <!--<decorator name="printable" page="printable.jsp"/>--> </decorators> main.ftl decorator: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>${title}</title> <link href="<@s.url value='/styles/main.css' encode='false' includeParams='none'/>" rel="stylesheet" type="text/css" media="all"/> ${head} </head> <body id="page-home"> <div id="page"> <div id="outer-header"> <div id="header" class="clearfix"> <div id="branding"> <h1 class="title">Struts Showcase</h1> <@s.action var="dateAction" name="date" namespace="/" executeResult="true" /> </div><!-- end branding --> <div id="search"> <img src="<@s.url value='/images/struts-power.gif' encode='false' includeParams='none'/>" alt="Powered by Struts"/> </div><!-- end search --> <hr/> <div style="clear: both;"></div> </div> </div><!-- end header --> <div id="content" class="clearfix"> <div id="nav"> <div class="wrapper"> <h2 class="accessibility">Navigation</h2> <ul class="clearfix"> <li><@s.a value="/showcase.jsp">Home</@s.a></li> <li><@s.a value="/ajax/index.jsp">Ajax</@s.a></li> <li><@s.a value="/chat/index.jsp">Ajax Chat</@s.a></li> <li><@s.a action="actionChain1!input" namespace="/actionchaining" includeParams="none">Action Chaining</@s.a></li> <li><@s.a action="index" namespace="/config-browser" includeParams="none">Config Browser</@s.a></li> <li><@s.a value="/conversion/index.jsp">Conversion</@s.a></li> <li><@s.a value="/empmanager/index.jsp">CRUD</@s.a></li> <li><@s.a value="/wait/index.jsp">Execute & Wait</@s.a></li> <li><@s.a value="/filedownload/index.jsp">File Download</@s.a></li> <li><@s.a value="/fileupload/index.jsp">File Upload</@s.a></li> <li><@s.a value="/freemarker/index.jsp">Freemarker</@s.a></li> <li><@s.a action="hangmanMenu" namespace="/hangman">Hangman</@s.a></li> <li><@s.a value="/jsf/index.jsp">JavaServer Faces</@s.a></li> <li><@s.a value="/tags/index.jsp">Tags</@s.a></li> <li><@s.a value="/tiles/index.action">Tiles</@s.a></li> <li><@s.a value="/token/index.jsp">Token</@s.a></li> <li><@s.a value="/validation/index.jsp">Validation</@s.a></li> <li><@s.a value="/interactive/index.jsp">Interactive Demo</@s.a></li> <li><@s.a value="/person/index.jsp">Person Manager</@s.a></li> <li><@s.a value="/integration/editGangster">Struts 1 Integration</@s.a></li> <li class="last"><@s.a value="/help.jsp">Help</@s.a></li> </ul> </div> <hr/> </div><!-- end nav --> ${body} </div><!-- end content --> <div id="footer" class="clearfix"> <p>Copyright © 2003-<@s.property value="#dateAction.now.year + 1900" /> The Apache Software Foundation.</p> <@s.hidden name="project-name" value="Struts 2" /> </div><!-- end footer --> <p/> </div><!-- end page --> </body> </html> JSP decorator output: [cid:image001.png@01CB62FF.E7CBB260] FTL decorator output: [cid:image002.png@01CB6300.322DE710] Derrick Koes Principal Software Engineer SkillSoft<http://www.skillsoft.com/> 300 Innovative Way, Suite 201 Nashua, NH 03062 Tel: 603-821-3264 --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org<mailto:user-unsubscr...@struts.apache.org> For additional commands, e-mail: user-h...@struts.apache.org<mailto:user-h...@struts.apache.org>