[
https://issues.apache.org/jira/browse/WW-4306?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13955240#comment-13955240
]
Brandon Ramirez commented on WW-4306:
-------------------------------------
I think I mis-diagnosed the problem. See in our app the <@s.action> call is to
load a menu bar and that is what is missing from the site after upgrading and
switching to org.apache.struts2.sitemesh.FreemarkerPageFilter.
But the action results are actually present. The problem is that what comes
before it is missing. Due to the way the (no longer valid) HTML gets parsed,
the menu bar fails to render so I assumed that include was failing (which it
was prior to WW-3330).
Look at the attached web app I sent earlier. It does demonstrate the problem.
With the default web.xml config I included, requesting
/ww4306/usesaction.action returns:
Static content This is the menu! If you see me, then s.action worked.More
static content
After switching the filter to FreemarkerPageFilter via web.xml, I get:
This is the menu! If you see me, then s.action worked.More static content
Notice that anything before "This is the menu!" (which is the output of the
<@s.action> call) is no longer present in the response.
I will update the steps in this issue to make it clearer.
I looked at the source of the 2 filters and I suspect the problem is that the
FreemarkerPageFilter forces a different decorator. SiteMeshFilter uses
com.opensymphony.sitemesh.compatability.OldDecorator2NewDecorator, which
implements the inclusion via a servlet request dispatcher.
FreemarkerPageFilter
org.apache.struts2.sitemesh.OldDecorator2NewStrutsFreemarkerDecorator, which
uses template.process and writes the output directly to the response writer.
I don't know much about the internals of Struts2 and WebWork, so I am a bit out
of my domain here, but could this be a buffer flushing problem of some kind?
> After WW-3330, <@s.action> broken in non-sitemesh freemarker templates
> ----------------------------------------------------------------------
>
> Key: WW-4306
> URL: https://issues.apache.org/jira/browse/WW-4306
> Project: Struts 2
> Issue Type: Bug
> Components: Plugin - SiteMesh
> Affects Versions: 2.3.16.1
> Reporter: Brandon Ramirez
> Labels: freemarker, regression
> Fix For: 2.3.x
>
> Attachments: ww4306.war
>
>
> After upgrading from Struts 2.1.8.1 to 2.3.16.1, we observed that if a
> Sitemesh Freemarker decorator used <@s.action> to include another action, the
> action's Freemarker view output is not rendered.
> This is identical to what WW-3330 describes, which is reported fixed in 2.2.3.
> The documentation
> (http://struts.apache.org/release/2.3.x/docs/sitemesh-plugin.html) specifies
> to use com.opensymphony.sitemesh.webapp.SiteMeshFilter. The fix in WW-3330
> applies to org.apache.struts2.sitemesh.FreemarkerPageFilter, a sub-class of
> SiteMeshFilter. Using SiteMeshFilter as the documentation specifies, WW-3330
> does not appear resolved.
> If I change my web.xml to use FreemarkerPageFilter instead of SiteMeshFilter,
> the WW-3330 problem is resolved, but now <@s.action> fails to render
> Freemarker output when *not* included via Sitemesh decorators.
> Judging by the number of configuration changes (servlets and filters) in 2.2,
> it is possible that I have web.xml configured incorrectly. If that is the
> case, feel free to throw your tomatoes :) But I have triple checked and at
> this point I am wondering if this is a regression from WW-3330.
> If needed, I can try to put together a minimal web app to reproduce the
> problem.
--
This message was sent by Atlassian JIRA
(v6.2#6252)