1. 程式人生 > >使用FreeMarker將資料模型中的值合併到模板檔案中

使用FreeMarker將資料模型中的值合併到模板檔案中

步驟如下:

①建立Configuration例項,該例項負責管理FreeMarker的模板載入路徑,負責生成模板例項。

②使用Configuration例項來生成Template例項,同時需要指定使用的模板檔案。

③填充資料模型,資料模型就是一個Map物件。

④呼叫Template例項的process方法完成合並。

根據上面步驟,下面提供一個使用FreeMarker建立輸出的Java程式,該程式程式碼如下:

public class HelloFreeMarker

{

    //負責管理FreeMarker模板檔案的Configuration例項

    private Configuration cfg;

    //負責初始化Configuration例項的方法

    public void init() throws Exception

    {

        //初始化FreeMarker配置

        //建立一個Configuration例項

        cfg = new Configuration();

        //設定FreeMarker的模板檔案位置

        cfg.setDirectoryForTemplateLoading(new File("templates"));

    }

    //處理合並的方法

    public void process() throws Exception

    {

        //建立資料模型

        Map root = new HashMap();

        root.put("name", "FreeMarker!");

        root.put("msg", "您已經完成了第一個FreeMarker的例項!");

        //使用Configuration例項來載入指定模板

        Template t = cfg.getTemplate("test.flt");

        //處理合並

        t.process(root, new OutputStreamWriter(System.out));

    }

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

    {

        HelloFreeMarker hf = new HelloFreeMarker();

        hf.init();

        hf.process();

    }

}

上面程式碼建立了一個Map例項root,這個root將作為模板檔案的資料模型,在該資料模型中儲存了兩個

key-value對,其中第一個是name,第二個是msg,這兩個key都有對應的value,這兩個value將會填充到模板中對應的插值處。

雖然FreeMarker可以在Java中使用,但大部分時候FreeMarker都用於生成HTML頁面。

下面介紹在Web應用中使用FreeMarker,用Servlet來合併模板和資料模型,下面是Servlet應用中的程式碼:

public class HelloServlet extends HttpServlet

{

    //負責管理FreeMarker模板檔案的Configuration例項

    private Configuration cfg;

    //負責初始化Configuration例項的方法

    public void init() throws Exception

    {

        //初始化FreeMarker配置

        //建立一個Configuration例項

        cfg = new Configuration();

        //設定FreeMarker的模板檔案位置

        cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");

    }

    //生成使用者響應

    public void service(HttpServletRequest request, HttpServletResponse response) throws

    ServletException, IOException

    {

        //建立資料模型

        Map root = new HashMap();

        root.put("message", "Hello FreeMarker!");

        //使用Configuration例項來載入指定模板,即:取得模板檔案

        Template t = cfg.getTemplate("test.flt");

        //開始準備生成輸出

        //使用模板檔案的charset作為本頁面的charset

        //使用text/html,MIME-type

        response.setContentType("text/html; charset=" + t.getEncoding());

        Writer out = response.getWriter();

        //合併資料模型和模板,並將結果輸出到out中

        try

        {

            t.process(root, out);

        }

        catch(TemplateException e)

        {

            throw new ServletException("處理Template模板中出現的錯誤", e);

        }

    }

}