[
https://issues.apache.org/jira/browse/VELOCITY-787?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12928673#action_12928673
]
Don Mendelson commented on VELOCITY-787:
----------------------------------------
Christoph and Nathan, thanks for the suggestions. I had already tried a
workaround using a StringWriter to collect portions of a rendered template
until I knew what file to write it to. So clearly there are ways to accomplish
the result outside of Velocity.
However, I argue for the proposal on two grounds:
First, having an output directive (or at least the ability to create a custom
one) would form a symmetry with input directives, such as #include and #parse.
Second, much of the discussion of template engines and similar rendering tools
revolves around separating model from view. My example of generating C++ header
and implemention files from a common context is conceptually consistent with
the idea of multiple views of one model.
> Write to multiple files, controlled by template directives
> ----------------------------------------------------------
>
> Key: VELOCITY-787
> URL: https://issues.apache.org/jira/browse/VELOCITY-787
> Project: Velocity
> Issue Type: New Feature
> Components: Engine
> Affects Versions: 2.0
> Environment: All environments
> Reporter: Don Mendelson
> Attachments: FileTool.java
>
>
> For some purposes, such as code generation, it would be very desirable to
> output to multiple files from the same context. For example, to generate code
> for a C++ class, two files must be generated - a header and implementation
> file. Rendering could be driven by the same context in both cases, which
> would desribe the class name, method signatures, etc. Currently this must be
> done by running the engine twice - once with a header template and again with
> an implementation file template.
> Furthermore, it would desirable to determine the output file names during
> rendering, based on a combination of template directives and data in the
> context. To use the code generation example, the header and implementation
> file names would be determined by the name of the class to be generated.
> This is not possible with the current method signature of Directive:
> public boolean render(InternalContextAdapter context, Writer writer, Node
> node)
> An output directive would want to change the writer to a different instance
> of FileWriter, for instance. But since Java passes object references by
> value, the writer object cannot be replaced.
> The proposal is to provide a method to install a new instance of Writer
> during rendering of a template. This would support both writing multiple
> outputs in one run of the engine as well as controlling the file names of the
> outputs.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]