How to generate Java FreeMarker output as a String

I started using the Java FreeMarker template library recently, and I was surprised that it doesn’t return its output as a String by default. Skipping my angst over that, this code shows how to output FreeMarker results to a String:

// write the freemarker output to a StringWriter
val stringWriter = new StringWriter
template.process(data, stringWriter)

// get the String from the StringWriter
val string = stringWriter.toString

(That code is written in Scala, but as you can see, it converts easily to Java.)

The following complete FreeMarker example shows how this works:

import java.io._
import java.util._
import freemarker.template._
import scala.collection.JavaConversions._
import scala.collection.mutable.ArrayBuffer
 
object Test1 extends App {
     
    val cfg = new Configuration
    try {
        val template = cfg.getTemplate("/Users/al/Projects/Scala/Tests/FreeMarkerTests/hello.ftl")
         
        val data = scala.collection.mutable.Map[String, Object]()
        data += ("message" -> "Hello, world!")
 
        val countries = new ArrayBuffer[String]
        countries += ("India")
        countries += ("United States")
        countries += ("Germany")
        countries += ("France")
         
        data.put("countries", countries)
        
        // write to string
        val output = new StringWriter
        template.process(data, output)
        
        val stringResult = output.toString
        // do whatever you want/need to do with the string here ...
         
    } catch {
        case t: Throwable => //t.printStaceTrace
    }

}

The source code for most of that class comes from this viralpatel.net link. I just added the part that shows how to output the FreeMarker template result as a String.

Share it!

There’s just one person behind this website; if this article was helpful (or interesting), I’d appreciate it if you’d share it. Thanks, Al.

Add new comment

The content of this field is kept private and will not be shown publicly.

Anonymous format

  • Allowed HTML tags: <em> <strong> <cite> <code> <ul type> <ol start type> <li> <pre>
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.