freemarker基本语法

前面已经讲了第一个freemarker程序(参考第一个freemarker程序),这里接着讲freemarker常用语法。像常用的模板引擎如freemarker,velocity,thymeleaf等,语法是类似的。
准备工作
第一步:创建maven工程(方便导包)导入freemarker与测试的包;

<dependencies>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.23</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
  </dependencies>

第二步:在maven工程中创建存放模板文件的文件夹(比如我这放创建在/WEB-INF/ftl);
第三步:在模板文件夹下创建模板文件student.ftl(后缀.ftl不是固定的只是freemarker默认的后缀是.ftl);
第四步:实体类Student
这里写图片描述
4、测试类FreeMarker中

1、访问pojo属性

语法:${key.property}

@Test
    public void test2() throws Exception{
        //创建一个Configuration对象,直接new一个对象。
                //构造方法的参数就是freemarker对应的版本号。
        Configuration config = new Configuration(Configuration.getVersion());
        //设置模板文件所在的路径。
        config.setDirectoryForTemplateLoading(new File("D:/测试/freemarker/src/main/webapp/WEB-INF/ftl"));
        //设置模板文件使用的字符集。
        config.setDefaultEncoding("gbk");
        //加载一个模板,创建一个模板对象。
        Template template = config.getTemplate("student.ftl");
        //创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
        Map map = new HashMap<Object, Object>();
        //1、访问pojo属性
        Student stu = new Student(1, "张三", 18, "安徽省池州市");
        map.put("stu", stu);

        //创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
        Writer writer = new FileWriter(new File("D:/模板引擎/freemarker/hello.txt"));
        //调用模板对象的process方法输出文件
        template.process(map, writer);
        //关闭流。
        writer.close();
    }

模板student.ftl中

<!DOCTYPE html>
<html>
<head>

<title>freemarker</title>
</head>
<body>
    <h1>1、访问pojo属性</h1>
    学号:${stu.id}<br>
    姓名:${stu.name}<br>
    年龄:${stu.age}<br>
    住址:${stu.address}<br>
</body>
</html> 

运行test2方法后查看 D:/模板引擎/freemarker/student.html。
这里写图片描述

2、访问List属性以及下标

语法:<#list 集合名称 as 元素名称>

在测试方法test2中,map中添加list

        //2、访问list属性以及list下标
        List<Student> list = new ArrayList<>();
        list.add(new Student(1,"Tom",19,"America"));
        list.add(new Student(2, "Jerry", 20, "Japan"));
        list.add(new Student(3,"Jack",21,"China"));
        list.add(new Student(4,"Lucy",22,"France"));
        map.put("stuList", list);

在模板student.ftl中访问list属性

<!DOCTYPE html>
<html>
<head>

<title>freemarker</title>
</head>
<body>
    <h1>1、访问pojo属性</h1>
    学号:${stu.id}<br>
    姓名:${stu.name}<br>
    年龄:${stu.age}<br>
    住址:${stu.address}<br>

    <h1>2、访问list</h1>
    <table border="1"cellspacing="0">
        <tr>
            <th>序号(list下标)</th>
            <th>学号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>住址</th>
        </tr>
        <#list stuList as stu>
        <tr>
            <td>${stu_index}</td>
            <td>${stu.id}</td>
            <td>${stu.name}</td>
            <td>${stu.age}</td>
            <td>${stu.address}</td>
        </tr>
        </#list>
    </table>
</body>
</html> 

运行test2方法后查看 D:/模板引擎/freemarker/student.html。

这里写图片描述

3、if、else语句使用

语法:
<#if 判断语句>
结果1
<#else>
结果2
</#if>

比如判断上面的list下标,如果是偶数那么背景色设置为红色,否则设为绿色。

在模板student.ftl中

<!DOCTYPE html>
<html>
<head>

<title>freemarker</title>
</head>
<body>
    <h1>1、访问pojo属性</h1>
    省略...

    <h1>2、访问list</h1>
    省略...

    <h1>3、if、else语句,下标为奇数的背景设置为红色,偶数为绿色</h1>
    <table border="1"cellspacing="0">
        <tr>
            <th>序号(list下标)</th>
            <th>学号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>住址</th>
        </tr>
        <#list stuList as stu>
        <#if stu_index % 2==0>
        <tr bgcolor="red">
        <#else>
        <tr bgcolor="green">
        </#if>
            <td>${stu_index}</td>
            <td>${stu.id}</td>
            <td>${stu.name}</td>
            <td>${stu.age}</td>
            <td>${stu.address}</td>
        </tr>
        </#list>
    </table>
</body>
</html> 

运行方法test2,查看 D:/模板引擎/freemarker/student.html。
这里写图片描述

4、访问日期
比如map中添加了日期map.put(“date”,new Date());
如果用${date}这种方式访问,是会报错的,但是根据错误信息就知道怎么取date中信息了,提供了三种方法还有自定义的方法

语法:
1、${date?date}
2、${date?time}
3、${date?datetime}
4、自定义:${date?string('pattern')}

测试方法的map中添加date

map.put("date",new Date);

模板student.ftl中访问如下(前面重复的不再列出):

    <h1>4date类型处理</h1>
    time:${date?time}<br>
    date:${date?date}<br>
    datetime:${date?datetime}<br>
    自定义:${date?string('yyyy-MM-dd')}

运行方法test2,查看 D:/模板引擎/freemarker/student.html。
这里写图片描述

5、null值的处理
Freemark语法不像EL那样,el是null值就不显示,但是freemarker语法则会报错
页面数据集添加的是null
Map.put(“val”,null);
模板:解决null值

方法1:${val?”默认值”}:如果val为nul的话就输出默认值,不是null就输出val

方法2:
<#if val??>1
<else>
    值2
</#if>

如果val值为空就输出值2,不为空输出值1

测试方法map中添加null值

//5null值的处理
map.put("value", null);

模板student.ftl中访问value

    <h1>5null值的处理</h1>
    <h2>第一种解决方案</h2>
    <#if value??>
        值不为空
    <#else>
        值为空
    </#if>
    <h2>第二种解决方案</h2>
    ${value!"默认值"}

运行方法test2,查看 D:/模板引擎/freemarker/student.html。
这里写图片描述

6、include
<#include “模板名称”>

测试方法map中添加

//6、include
map.put("hello", "hello freemarker!");

模板student.ftl中引入模板hello.ftl

<h1>6、include引入模板</h1>
<#include "hello.ftl">

注:hello.ftl里面是${hello}
那么引入就有个要求:数据集map里面必须有key为hello的元素。

运行方法test2,查看 D:/模板引擎/freemarker/student.html。
这里写图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值