You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Musachy Barroso (JIRA)" <ji...@apache.org> on 2009/10/27 18:05:51 UTC

[jira] Resolved: (WW-3195) When FreemarkerResult isn't writing directly to Response, s.action tag is broken

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

Musachy Barroso resolved WW-3195.
---------------------------------

    Resolution: Fixed

Fixed in trunk. Tests added as well. Please give it a try and let me know

> When FreemarkerResult isn't writing directly to Response, s.action tag is broken
> --------------------------------------------------------------------------------
>
>                 Key: WW-3195
>                 URL: https://issues.apache.org/struts/browse/WW-3195
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.1.8
>            Reporter: Jasper Rosenberg
>             Fix For: 2.2.0
>
>
> In https://issues.apache.org/struts/browse/WW-1808, the FreemarkerResult was improved to support not writing to the response until it had completed processing.
> Unfortunately, if you are using an s.action tag, then that means the s.action output ends up before the main template output rather than inline.
> One way to fix this (which I did locally) is to add a thread local that keeps track of the "parent" writer such that if there is one present the child writes to that at the end rather than the response's writer.
> Something like:
>     /** Thread local for the current writer. */
>     private static final ThreadLocal<CharArrayWriter> WRITER_THREAD_LOCAL 
>         = new ThreadLocal<CharArrayWriter>();
> ...
>    // Inside the case where we are writing upon completion
>             CharArrayWriter parentCharArrayWriter = WRITER_THREAD_LOCAL.get();
>             try {
>                 // Process the template with the normal writer since it was available
>                 // But delay writing in case exception
>                 CharArrayWriter charArrayWriter = new CharArrayWriter(1024);
>                 
>                 if (parentCharArrayWriter == null) {
>                     WRITER_THREAD_LOCAL.set(charArrayWriter);
>                 }
>                 
>                 template.process(model, charArrayWriter);
>                 charArrayWriter.flush();
>                 // Only the template that created the writer can actually write
>                 // to the response.  This is necessary to support the s.action tag.
>                 if (parentCharArrayWriter == null) {
>                     charArrayWriter.writeTo(writer);  // Write to the response writer
>                 } else {
>                     // Copying to parent enmass so don't get partially rendered s.actions
>                     charArrayWriter.writeTo(parentCharArrayWriter);
>                 }
>             } finally {
>                 if (parentCharArrayWriter == null) {
>                     WRITER_THREAD_LOCAL.remove();
>                 }
>             }

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


Re: WW-3291. What should I do to help move this issue forward.

Posted by Lukasz Lenart <lu...@googlemail.com>.
2009/10/27 Musachy Barroso <mu...@gmail.com>:
> usually just wait until one of those lazy struts committers merge the
> patch :). I can take a look at it and merge it into trunk on the
> weekend.

Lazy? I'm still a bit afraid to make a change into Struts2 code base ;-)


Regards
-- 
Lukasz
http://www.lenart.org.pl/
http://dailylog.lenart.org.pl/

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


Re: WW-3291. What should I do to help move this issue forward.

Posted by Musachy Barroso <mu...@gmail.com>.
usually just wait until one of those lazy struts committers merge the
patch :). I can take a look at it and merge it into trunk on the
weekend.

On a separate note, now that Sitemesh is more modular and reusable, is
it possible to write some tests for it?

musachy

On Tue, Oct 27, 2009 at 10:13 AM, Christian Stone <xt...@stonescape.net> wrote:
> I am asking simply because I have other bug fixes in the same codebase, and
> I want to resolve one before I complete and build a patch for the other.
>  However, I do not have a possibility of marking the bug resolved or to
> actually apply the patch to the codebase (I have not checked but I doubt I
> have write access to the struts source base).  So what should I do now?
>  What is the process?  I reread the docs and there is nothing discussing on
> what to do after submitting a patch for an issue.
>
> Thanks much!
>
> -- Christian
>
> P.S.  The new freemarker/velocity code is working great.  I moved it to a
> production server to test and it has no problem mixing freemarker decorators
> on velocity/jsp results, vice versa... and handles both freemarker and
> velocity decorators just like SiteMesh intended.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>
>



-- 
Screw John Galt, who is Martin Gainty?

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


Re: WW-3291. What should I do to help move this issue forward.

Posted by Christian Stone <xt...@stonescape.net>.
I am asking simply because I have other bug fixes in the same  
codebase, and I want to resolve one before I complete and build a  
patch for the other.  However, I do not have a possibility of marking  
the bug resolved or to actually apply the patch to the codebase (I  
have not checked but I doubt I have write access to the struts source  
base).  So what should I do now?  What is the process?  I reread the  
docs and there is nothing discussing on what to do after submitting a  
patch for an issue.

Thanks much!

-- Christian

P.S.  The new freemarker/velocity code is working great.  I moved it  
to a production server to test and it has no problem mixing freemarker  
decorators on velocity/jsp results, vice versa... and handles both  
freemarker and velocity decorators just like SiteMesh intended.


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