tl  tr
  Home | Tutorials | Articles | Videos | Products | Tools | Search
Interviews | Open Source | Tag Cloud | Follow Us | Bookmark | Contact   
 Template Engines > Freemarker > How to create a simple menu in Freemarker

How to create a simple menu in Freemarker 

FreeMarker is a java based template engine for complex template processing. This requires the library freemarker-2.3.16.jar to be in classpath. The following example shows how to generate HTML for rendering a simple menu.

File Name  :  
/FREEMARKER001/config/menu.ftl 

File Name  :  
com/bethecoder/tutorials/freemarker/common/Category.java 
   
package com.bethecoder.tutorials.freemarker.common;

import java.util.ArrayList;
import java.util.List;

public class Category {
  private String categoryName;
  private List<MenuItem> menuItems = new ArrayList<MenuItem>();
  
  public Category(String categoryName) {
    super();
    this.categoryName = categoryName;
  }
  
  public String getCategoryName() {
    return categoryName;
  }
  
  public void setCategoryName(String categoryName) {
    this.categoryName = categoryName;
  }
  
  public List<MenuItem> getMenuItems() {
    return menuItems;
  }
}

   

File Name  :  
com/bethecoder/tutorials/freemarker/common/MenuItem.java 
   
package com.bethecoder.tutorials.freemarker.common;

public class MenuItem {
  private String displayName;
  private String url;
  
  public MenuItem(String displayName, String url) {
    super();
    this.displayName = displayName;
    this.url = url;
  }
  
  public String getDisplayName() {
    return displayName;
  }
  
  public void setDisplayName(String displayName) {
    this.displayName = displayName;
  }
  
  public String getUrl() {
    return url;
  }
  
  public void setUrl(String url) {
    this.url = url;
  }
}
   

File Name  :  
com/bethecoder/tutorials/freemarker/tests/MenuRenderTest.java 
Author  :  Sudhakar KV
Email  :  [email protected]
   
package com.bethecoder.tutorials.freemarker.tests;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bethecoder.tutorials.freemarker.common.Category;
import com.bethecoder.tutorials.freemarker.common.MenuItem;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class MenuRenderTest {

  /**
   @param args
   @throws IOException 
   @throws TemplateException 
   */
  public static void main(String[] argsthrows IOException, TemplateException  {

    //Get template from classpath
    Configuration cfg = new Configuration();
    cfg.setClassForTemplateLoading(MenuRenderTest.class, "/");
    Template template = cfg.getTemplate("menu.ftl");
    
    //Prepare data model
    Category first = new Category("First Category");
    first.getMenuItems().add(new MenuItem("One""http://first.com/One"));
    first.getMenuItems().add(new MenuItem("Two""http://first.com/Two"));
    
    Category second = new Category("Second Category");
    second.getMenuItems().add(new MenuItem("One""http://second.com/One"));
    second.getMenuItems().add(new MenuItem("Two""http://second.com/Two"));
    second.getMenuItems().add(new MenuItem("Three""http://second.com/Three"));
    List<Category> categoryList = Arrays.asList(first, second);
    
    Map<String, Object> dataModel = new HashMap<String, Object>();
    dataModel.put("categoryList", categoryList);
    
    //Merge template and data
    OutputStreamWriter output = new OutputStreamWriter(System.out);
    template.process(dataModel, output);
  }
}
   

It gives the following output,
File Name  :  OUTPUT

File Name  :  OUTPUT
  1. First Category
  2. Second Category



 
  


  
bl  br