struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maurizio Cucchiara <maurizio.cucchi...@gmail.com>
Subject Re: Freemarker sitemesh decorator does not render struts 2.2.1 action tag
Date Sun, 17 Oct 2010 00:06:02 GMT
Hi Derrick,
I just upload a patch that should fix the problem you have mentioned.



2010/10/4 Derrick Koes <Derrick_Koes@skillsoft.com>:
> Ah, this appears to be a known issue.  Please see WW-3330 at https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&mode=hide&pid=12311041&sorter/order=DESC&sorter/field=priority&resolution=-1&component=12313331
>
> This is a fairly major road block to upgrade.
>
>
>
> -----Original Message-----
> From: Maurizio Cucchiara [mailto:maurizio.cucchiara@gmail.com]
> Sent: Monday, October 04, 2010 2:54 PM
> To: Struts Users Mailing List
> Subject: Re: Freemarker sitemesh decorator does not render struts 2.2.1 action tag
>
> You're right I didn't see the executeResult attribute in your action directive.
> It's look like you find a new bug out.
> You should add a new issue: https://issues.apache.org/jira/browse/WW
>
> Maurizio Cucchiara
>
> 2010/10/4 Derrick Koes <Derrick_Koes@skillsoft.com>:
>> 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.cucchiara@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_Koes@skillsoft.com<mailto:Derrick_Koes@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 &copy; 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-unsubscribe@struts.apache.org<mailto:user-unsubscribe@struts.apache.org>
>> For additional commands, e-mail: user-help@struts.apache.org<mailto:user-help@struts.apache.org>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>



-- 
Maurizio Cucchiara

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message