You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by e v a n l e o n a r d <ev...@mindreef.com> on 2005/04/05 17:26:17 UTC
RE: Streaming from the middle of a template?
Hi Shinobu,
Thanks for the reply. I'd like to understand this a little deeper.
> > So my question is, how do I get ahold of the actual stream that the
> > velocity engine is using, from within a template, and add my own
> > output to it? Is this possible, or is there a better way?
>
> You can't. Also, Velocity outputs to Writers, not Streams.
Writers are fine, I don't actually need the stream.
> I'm not sure what exactly you're trying to do, but some suggestions:
> - Put a String representation of the Stream in the Context and render it.
> - Create a $RefenceToAnObjectWithAStream.streamToString() method and call
it.
> - Create a tool that converts a Stream to a String and call it.
> - Put a StringWriter wrapped in an OutputStreamWriter in the Context and
> render it after calling your
> $RefenceToAnObjectWithAStream.streamToOutput() method.
Here's what I'm doing: I've written a reusable html-control model for
creating html components within the struts framework using velocity. These
components use velocity themselves to render their content. These controls
may also themselves contain other sub-controls, and so on. It seems
ineffecient for me for each of these sub-controls, to have to create a
single large string and return it to its parent control to render it. I
would rather pass a writer down through the execution hierarchy having each
subcontrol add its output to the parents writer, thus using a single writer
to achieve the total output, instead of a segmented writer.toString ->
writer.toString -> writer.toString sort of process.
Does that make more sense?
Evan Leonard
-----Original Message-----
From: Shinobu Kawai [mailto:shinobu.kawai@gmail.com]
Sent: Monday, March 28, 2005 12:19 PM
To: Velocity Users List
Subject: Re: Streaming from the middle of a template?
Hi Evan,
> My name is Evan Leonard. This is my first post to the users group, so
> I'd like to start by saying, great work with velocity. I am enjoying
> working with it very much. Simple & powerful, excellent.
Welcome to the gang! :)
> I am mainly using velocity in a struts/servlet situation, but I'd like
> a more general answer that would work in other environments as well.
> My question has to do with writing directly to the output stream that the
> velocity engine is using, mid-template. For instance if I have a
template
> that looks like:
>
> ...[some html]...
>
> $RefenceToAnObjectWithAStream.streamToOutput($ReferenceToOutputStream)
>
> ...[some more html]...
>
> I'm not sure what output stream to pass to the streaming function.
> I've tried using $response.getOutputStream and $response.getWriter
> from within the template. I've tried making a velocity view tool that
> grabs the response in its init method and holds on to it until the
> tool is used. But these methods all create very unusual results, like
> outputing things in the wrong order, or not outputing some things at all.
>
> So my question is, how do I get ahold of the actual stream that the
> velocity engine is using, from within a template, and add my own
> output to it? Is this possible, or is there a better way?
You can't. Also, Velocity outputs to Writers, not Streams.
I'm not sure what exactly you're trying to do, but some suggestions:
- Put a String representation of the Stream in the Context and render it.
- Create a $RefenceToAnObjectWithAStream.streamToString() method and call
it.
- Create a tool that converts a Stream to a String and call it.
- Put a StringWriter wrapped in an OutputStreamWriter in the Context and
render it after calling your
$RefenceToAnObjectWithAStream.streamToOutput() method.
Best regards,
-- Shinobu
--
Shinobu Kawai <sh...@gmail.com>
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-user-help@jakarta.apache.org