velocity-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nathan Bubna <>
Subject Re: [tools-2.0] How to access Writer in tool
Date Thu, 26 Feb 2009 22:30:33 GMT
On Thu, Feb 26, 2009 at 1:41 PM, Antonio Petrelli
<> wrote:
> Hi all
> Is there a way to access the writer that is used to write in the
> response, from a request-scoped tool?

In Velocity 1.6, we introduced the
org.apache.velocity.runtime.Renderable interface, which has a "boolean
execute(context, writer)" method.  If, when rendering a reference,
Velocity comes across a Renderable, it calls that method instead of
calling toString() and writing that value.  but even if you do
implement Renderable, please consider having your toString() be
functional (e.g. passing a StringWriter and null context to

> I tried using the HttpServletResponse's writer, but it writes included
> resources in wrong order (as I suspected). It is the same effect that
> you would have in JSP tags when you use HttpServletResponse's writer
> instead of PageContext's one.

yeah, we want content to run through Velocity, direct writing is frowned upon.

> I took a look at TilesTool and I noticed that, in fact, the included
> resources are transformed in strings and then returned to the
> template. Sincerely I don't like it.

it keeps things orderly and flexible, allowing, for instance, tools to
grab each other out of the context and interact with the same API.
but yes, it can be a performance hit in situations involving a lot of

> In TilesViewServlet I noticed that, if "bufferOutput" is true, a
> StringWriter is used, otherwise the HttpServletResponse's one is used.
> I wish to use the correct writer in both cases.

please do!  but your options are restricted to Renderable (Velocity
1.6+) or toString() (any version).  Velocity is not in the business of
handing out the writer to objects before it is time to render them,
sorry.  Users can hack that in easily by extending VelocityView and
overwriting performMerge(..) to drop the writer in the context, but
that won't work well for a TilesTool.

> Thanks in advance
> Antonio
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message