码迷,mamicode.com
首页 > 其他好文 > 详细

FreeMarker模板引擎基础知识

时间:2016-08-21 14:03:04      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

FreeMarker基础简介

FreeMarker是一款模板引擎:一种基于模板,用来生成输出文本的通用工具。它是为java程序员提供的一个开发包或者说是库类,一般的用法就是Java程序通过SQL查询到数据,FreeMarker使用模板生成文件页面来显示已经准备好的数据。也就是 输出= 模板+数据模型。


FreeMarker支持的数据类型有:

标量

  • 字符串
  • 数字
  • 布尔值
  • 日期

容器

  • 哈希表
  • 系列

子程序

  • 方法和函数
  • 用户自定义指令(比如宏)

其他

  • 节点

模板(FTL编程)是由如下部分混合而成的:

  • Text文本:文本会照原样输出
  • Interpolation插值:计算出的值代替
  • FTL tags标签
  • Comments注释

常用操作,这里只列举不同于其他编程语言的:
默认值:value!"testValue" 这里如果value没有值就会把testValue这个默认值给他
检测不存在的值:hasValue??结果是true或false。


我们也可以自定义指令,自定义指令可以使用macro指令来定义。比如:

定义宏

<#macro welcome>
    <h1>Hello world!</h1>
</#macro>

宏调用:

<@welcome></@welcome> 或者 <@welcome/>

输出结果:

<h1>Hello world!</h1>

也可以定义带有参数的宏

定义宏

<#macro welcome person>
    <h1>Hello world! Hello ${person}!</h1>
</#macro>

宏调用:

<@welcome person="YEN"></@welcome> 或者 <@welcome person="YEN"/>

输出结果:

<h1>Hello world! Hello YEN!</h1>

如果需要多个参数则采用下列形式

<#macro 宏名 参数1名称 参数2名称 参数3名称>
    处理
</#macro>

eg:

<#macro Welcome name sex age>
    <h1>Hello,${name}-${sex}-${age}</h1>
</#macro>

调用宏时:

<@#Welcome name="YEN" sex="男" age="20"/>

自定义指令可以嵌套内容 <#nested>

定义

<#macro testNested>
    <ul>
        <li>
            <#nested>
        </li>
    <ul>
</#macro>

调用

<@testNested>this is test Nested!</@testNested>

输出:

<ul>
        <li>
            this is test Nested!
        </li>
<ul>

嵌套的内容可以被多次调用:
定义

<#macro testNested>
    <ul>
        <li>
            <#nested>
            <#nested>
            <#nested>
        </li>
    <ul>
</#macro>

调用

<@testNested>this is test Nested!</@testNested>

输出:

<ul>
        <li>
            this is test Nested!
            this is test Nested!
            this is test Nested!
        </li>
<ul>

宏和循环变量

<#macro doCount>
    <#nested 1>
    <#nested 2>
    <#nested 3>
</#macro>
<@doCount; x>
    ${x} test.
</@doCount>
1 test.
2 test.
3 test.


FreeMarker程序开发
首先自然要导入FreeMarker程序的jar包

一个FreeMarker需要如下步骤:

package com.test.freemarker;

import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

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

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

        //创建Freemarker配置实例
        Configuration cfg = new Configuration();
        cfg.setDirectoryForTemplateLoading(new File("templates")); 

        //创建数据模型
        Map map = new HashMap();
        map.put("username", "YEN");


        //加载模板文件
        Template t1 = cfg.getTemplate("test.ftl");

        //显示生成的数据
        Writer out = new OutputStreamWriter(System.out);
        t1.process(map, out);
        out.flush();

    }
}

FreeMarker模板引擎基础知识

标签:

原文地址:http://blog.csdn.net/yen_csdn/article/details/52266499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!