Reference a Map by name within Velocity Template

Posted by Wiretap on Stack Overflow See other posts from Stack Overflow or by Wiretap
Published on 2010-02-26T19:43:12Z Indexed on 2010/03/13 16:25 UTC
Read the original article Hit count: 412

Filed under:
|
|
|

Pretty sure there is an easy answer to this, but just can't find the right VTL syntax.

In my context I'm passing a Map which contains other Maps. I'd like to reference these inner maps by name and assign them within my template. The inner maps are constructed by different parts of the app, and then added to the context

by way of example

public static void main( String[] args )
    throws Exception
{

    VelocityEngine ve = new VelocityEngine();
    ve.init();
    Template t = ve.getTemplate( "test.vm" );
    VelocityContext context = new VelocityContext();

    Map<String,Map<String,String>> messageData = new HashMap<String, Map<String,String>>();


    Map<String,String> data_map = new HashMap<String,String>();
    data_map.put("data_1","1234");
    data_map.put("a_date", "31-Dec-2009");

    messageData.put("inner_map", data_map);

    context.put("msgData", messageData);
    StringWriter writer = new StringWriter();

    t.merge( context, writer );
    System.out.println( writer.toString() );
}

Template - test.vm

#set ($in_map =  $msgData.get($inner_map) )

data:

    $in_map.data_1
    $in_map.a_date  

© Stack Overflow or respective owner

Related posts about java

Related posts about velocity