[ 
https://issues.apache.org/struts/browse/WW-785?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ted Husted reassigned WW-785:
-----------------------------

    Assignee: Ted Husted  (was: Patrick Lightbody)

> Freemarker JSP Taglibs fails if action has param named "Request"
> ----------------------------------------------------------------
>
>                 Key: WW-785
>                 URL: https://issues.apache.org/struts/browse/WW-785
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - Tags
>    Affects Versions: WW 2.1.7
>         Environment: Windows XP (SP2), Tomcat 5.0.28, Java 1.4.2_07, 
> Freemarker 2.3.2, WebWork 2.1.7, Spring 1.2rc2
>            Reporter: James Storey
>            Assignee: Ted Husted
>            Priority: Minor
>             Fix For: 2.1.1
>
>         Attachments: freemarker.jar, freemarker_request_conflict.patch, 
> webwork_freemarker_request_conflict_changes.tar.gz
>
>
> I was trying to get a Freemarker variant of AppFuse with WebWork running, and 
> ran into a problem.
> If an action (e.g., AppFuse UserAction) has an attribute named Request, this 
> overrides the 'internal' entry on the stack put there by FreemarkerManager, 
> which causes the FreeMarkerPageContext to fail, and raise an error that JSP 
> Taglibs are not supported outside of FreemarkerServlet.
> I suspect this would happen in other cases as well, e.g., if using 
> FreemarkerServlet (native or WW version), with a url 
> http://host/path?Request=MessUp, though I didn't test this.
> Looking through the logic, the problem is that Freemarker uses a not too 
> unique key of "Request" for the HttpRequestModel.  To fix this requires 
> patches to both Freemarker (which I've submitted - see 
> http://sourceforge.net/tracker/index.php?func=detail&aid=1202918&group_id=794&atid=100794)
>  and to WebWork.  The approach is the following.  In addition to using 
> "Application" and "Request" as keys, I also store another copy using 
> ".freemarker.Application" and ".freemarker.Request", in 
> freemarker.ext.servlet.FreemarkerServlet and in 
> com.opensymphony.webwork.views.freemarker.FreemarkerManager. Then, in 
> freemarker.ext.jsp.TaglibFactory (maybe not needed, but done for consistency) 
> and freemarker.ext.jsp.FreeMarkerPageContext, I use the .freemarker. key 
> rather than the unqualified key, so that this picks up the correct 
> HttpRequestHashModel rather than whatever was put in by the application for 
> "Request".
> Also, while I was making changes, I did 2 other things.  First, though it 
> seemed to work okay, the setup code in FreemarkerManager was rather different 
> than that in freemarker.ext.servlet.FreemarkerServlet.  I kept the same 
> structure as the original FreemarkerManager, but modified this to closely 
> match what is being done in freemarker.ext.servlet.FreemarkerServlet.  I 
> actually did this first because I thought this was the problem, and then 
> tracked it down to the non-unique key, but it seemed that this cleanup would 
> be useful to make sure the Webwork invocation matched what Freemarker does 
> internally.
> Next, I added an entry "param" for the HttpRequestParametersHashModel so that 
> from the template, you can simply do ${param.name} to get a name parameter 
> passed in.  This is similar to what you'd do in a JSP, and seemed generally 
> useful.
> Note that I did all this aimed at freemarker result type, and did not worry 
> about the com.opensymphony.webwork.views.freemarker.FreemarkerServlet, as 
> this is deprecated, and it isn't clear that JSP tag includes ever would have 
> worked for this.
> I'll try to send a patch file for WebWork (based on 2.1.7) and a copy of the 
> patch file for Freemarker.
> James Storey

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to