Class CaptureOutput

All Implemented Interfaces:
TemplateModel, TemplateTransformModel

@Deprecated public class CaptureOutput extends Object implements TemplateTransformModel
Use block-assignments instead, like <assign x>...</assign>.
A transform that captures the output of a block of FTL code and stores that in a variable.

As this transform is initially present in the shared variable set, you can always access it from the templates:

 <@capture_output var="captured">

And later in the template you can use the captured output:


This transform requires one of three parameters: var, local, or global. Each of them specifies the name of the variable that stores the captured output, but the first creates a variable in a name-space (as <#assign>), the second creates a macro-local variable (as <#local>), and the last creates a global variable (as <#global>).

In the case of an assignment within a namespace, there is an optional parameter namespace that indicates in which namespace to do the assignment. if this is omitted, the current namespace is used, and this will be, by far, the most common usage pattern.

  • Constructor Details

    • CaptureOutput

      public CaptureOutput()
  • Method Details

    • getWriter

      public Writer getWriter(Writer out, Map args) throws TemplateModelException
      Description copied from interface: TemplateTransformModel
      Returns a writer that will be used by the engine to feed the transformation input to the transform. Each call to this method must return a new instance of the writer so that the transformation is thread-safe.

      This method should not throw RuntimeException, nor IOException that wasn't caused by writing to the output. Such exceptions should be catched inside the method and wrapped inside a TemplateModelException. (Note that setting Configuration.setWrapUncheckedExceptions(boolean) to true can mitigate the negative effects of implementations that throw RuntimeException-s.)

      Specified by:
      getWriter in interface TemplateTransformModel
      out - the character stream to which to write the transformed output
      args - the arguments (if any) passed to the transformation as a map of key/value pairs where the keys are strings and the arguments are TemplateModel instances. This is never null. (If you need to convert the template models to POJOs, you can use the utility methods in the DeepUnwrap class. Though it's recommended to work with TemplateModel-s directly.)
      The Writer to which the engine will write the content to transform, or null if the transform does not support nested content (body). The returned Writer may implements the TransformControl interface if it needs advanced control over the evaluation of the nested content. FreeMarker will call Writer.close() after the transform end-tag. Writer.close() must not close the Writer received as the out parameter (so if you are using a FilterWriter, you must override FilterWriter.close(), as by default that closes the wrapped Writer). Since 2.3.27 its also allowed to return the out writer as is, in which case it won't be closed.
      TemplateModelException - If any problem occurs that's not an IOException during writing the template output.