Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * Copyright (c) 2003 The Visigoth Software Society. All rights
   * reserved.
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  * 3. The end-user documentation included with the redistribution, if
  *    any, must include the following acknowledgement:
  *       "This product includes software developed by the
  *        Visigoth Software Society ("
  *    Alternately, this acknowledgement may appear in the software itself,
  *    if and wherever such third-party acknowledgements normally appear.
  * 4. Neither the name "FreeMarker", "Visigoth", nor any of the names of the 
  *    project contributors may be used to endorse or promote products derived
  *    from this software without prior written permission. For written
  *    permission, please contact
  * 5. Products derived from this software may not be called "FreeMarker" or "Visigoth"
  *    nor may "FreeMarker" or "Visigoth" appear in their names
  *    without prior written permission of the Visigoth Software Society.
  * ====================================================================
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Visigoth Software Society. For more
  * information on the Visigoth Software Society, please see
 package freemarker.template;
 import java.util.Map;
Objects that implement this interface can be used as user-defined directives (much like macros); you should rather use the newer TemplateDirectiveModel instead. Altough implementing output filters is more handy with this interface, this interface will be certainly deprecated as superfluous, starting from FreeMarker 2.4. But as far as the template engine is concerned, you can use both equivalently as a user-defined directive.

Note that, as of FreeMarker 2.1, TemplateTransformModel has changed. This is a more powerful implementation. There is a quick-and-dirty way to patch any legacy TemplateTransformModel so that it implements the new API. You simply add the following as your implementation of the getWriter() call:

    public Writer getWriter(final Writer out, 
                            Map args) 
       final StringBuffer buf = new StringBuffer();
       return new Writer() {
           public void write(char cbuf[], int off, int len) {
               buf.append(cbuf, off, len);

           public void flush() throws IOException {
           public void close() throws IOException {
               StringReader sr = new StringReader(buf.toString());
               StringWriter sw = new StringWriter();
               transform(sr, sw);


Attila Szegedi
$Id:,v 1.36 2003/04/11 20:57:32 revusky Exp $
public interface TemplateTransformModel extends TemplateModel {

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.

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 freemarker.template.utility.DeepUnwrap class.
a writer to which the engine will feed the transformation input, or null if the transform does not support nested content (body). The returned writer can implement the TransformControl interface if it needs advanced control over the evaluation of the transformation body.
     Writer getWriter(Writer outMap args
         throws TemplateModelExceptionIOException;
New to GrepCode? Check out our FAQ X