栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

freemarker

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

freemarker

Freemarker介绍

freemarker是一个模板引擎: 是基于模板和要改变的数据,合并生成输出文本(HTML网页,电子邮件,配置文件,源代码)。是一个Java类库

上边显示,在后端将数据查出来,会将数据封装起来,称之为数据模型model     将一个前端的模板使用freemarker进行结合,就会生成一个页面。

数据模型+模板=输出  例子

数据模型

模板

输出

freemarker使用步骤

1:添加依赖

        
            org.springframework.boot
            spring-boot-starter-validation
        
        
            org.springframework.boot
            spring-boot-starter-freemarker
        

2 添加配置到配置文件

spring:
  freemarker:
    cache: false  #关闭模板缓存,方便测试
    settings:
      template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
    suffix: .ftl               #指定Freemarker模板文件的后缀名
 freemarker使用demo

1 创建模板




    
    Hello World!


普通文本 String 展示:

Hello

对象Student中的数据展示:
姓名:${stu.name}
年龄:${stu.age}

 2 创建数据模型

@Controller
public class Test01Basic {


    @GetMapping("/test01-basic")
    public String test01Basic(Model model) {
        Student student = new Student();
        student.setAge(18);
        student.setMoney(20F);
        student.setName("衡老师");
        model.addAttribute("stu", student);
//这里返回的必须是模板的文件名称
        return "01-basic";
    }
}

合并的页面:

 解释: 模型返回一个 01-basic   意思就是上边的模板名称。

在模型数据中将student对象添加到model中,key为stu       所以在上边的模板中就会stu.name   意思就是调用key为stu的值,将student对象调用出来然后再得到名称和年龄

注意:这里如果使用@RestController那么就会将返回的数据变为json,这不是想要的数据,所以要使用controller或者ViewAndModel

freemarker的基础使用 1 插值

格式:  ${....}

模板




    
    Hello World!


普通文本 String 展示:

Hello

对象Student中的数据展示:
姓名:${stu.name}
年龄:${stu.age}

数据模型

@Controller
public class Test01Basic {


    @GetMapping("/test01-basic")
    public String test01Basic(Model model) {
        Student student = new Student();
        student.setAge(18);
        student.setMoney(20F);
        student.setName("衡老师");
        model.addAttribute("stu", student);
        //这里返回的必须是模板的文件名称
        return "01-basic";
    }
}
 2 集合   list    map

模板




    
    Hello World!



<#-- list 数据的展示 -->
展示list中的stu数据:


<#--遍历集合list,将里面的值遍历取出来--> <#list list as stu> <#if stu.name=='刘墩墩'> <#else >
序号 姓名 年龄 钱包 集合长度:${list?size}
${stu_index+1} ${stu.name} ${stu.age} ${stu.money!""}
${stu_index+1} ${stu.name} ${stu.age} ${stu.money!""}

<#-- Map 数据的展示 --> map数据的展示:

方式一:通过map['keyname'].property
输出stu1的学生信息:
姓名:${map['tudent1'].name}
年龄:${map['tudent1'].age}
方式二:通过map.keyname.property
输出stu2的学生信息:
姓名:${map.tudent2.name}
年龄:${map.tudent2.age}

遍历map中两个学生信息:
<#list map?keys as key> <#--非空判断 如果money没有非空判断,那么Java中没有给money赋值,就会报错,这时候需要加入非空判断 非空有两种:1 ..money?? 2: ...money!"" -->
序号 姓名 年龄 钱包
${key_index} ${map[key].name} ${map[key].age}${map[key].money!""}
<#--就是比如有很长的数就会三位数一个逗号: 123,456,789 加了c:123456789--> c函数: 不加c函数:${point}
添加c函数:${point?c}

模型

@Controller
public class Test03ListAndMap {
    @GetMapping("/03-List-Map")
    public String test01Basic(Model model) {
        Student tudent1 = new Student();
        tudent1.setAge(18);
//        tudent1.setMoney(20F);
        tudent1.setName("衡老师");
        tudent1.setBirthday(new Date());
        model.addAttribute("stu", tudent1);

        Student tudent2 = new Student();
        tudent2.setAge(18);
//        tudent2.setMoney(20F);
        tudent2.setName("刘老师");
        tudent2.setBirthday(new Date());
        model.addAttribute("stu2", tudent2);

        Student tudent3 = new Student();
        tudent3.setAge(18);
//        tudent3.setMoney(20F);
        tudent3.setName("刘小平");
        tudent3.setBirthday(new Date());
        model.addAttribute("stu3", tudent3);

        Student tudent4 = new Student();
        tudent4.setAge(18);
//        tudent4.setMoney(20F);
        tudent4.setName("刘墩墩");
        tudent4.setBirthday(new Date());
        model.addAttribute("stu4", tudent4);


        //将上边的对象存到list中,再将list存到model
        ArrayList list = new ArrayList<>();
        Collections.addAll(list, tudent1, tudent2, tudent3, tudent4);
        model.addAttribute("list", list);

        //将上边的对象存到map中,再将map存到model
        Map map = new HashMap<>();
        map.put("tudent2", tudent2);
        map.put("tudent3", tudent3);
        map.put("tudent4", tudent4);
        map.put("tudent1", tudent1);
        model.addAttribute("map", map);
        model.addAttribute("point", 123456789765L);
        return "03-List-Map";
    }
}

 结果

解释:  这里的map可以通过遍历key来完成.  集合中如果想要1,2,3有序显示可以使用${传过来的key_index}

3 if指令


    <#list stus as stu >
        <#if stu.name='小红'>
            
            <#else >
            
姓名 年龄 钱包
${stu_index} ${stu.name} ${stu.age} ${stu.money}
${stu_index} ${stu.name} ${stu.age} ${stu.money}
3 运算符



    
    Hello World!


    比较运算符
    

=/== 和 != 比较:
<#if "xiaoming" == "xiaoming"> 字符串的比较 "xiaoming" == "xiaoming"
<#if 10 != 100> 数值的比较 10 != 100
其他比较
<#if 10 gt 5 > 形式一:使用特殊字符比较数值 10 gt 5
<#-- 日期的比较需要通过?date将属性转为data类型才能进行比较 --> <#if (date1?date >= date2?date)> 形式二:使用括号形式比较时间 date1?date >= date2?date


4 空值判断

控制使用   ??   代表是不是空

<#if stus??>
    <#list stus as stu>
    	......
    
    

5 如期格式化




    
    Hello World!


普通文本 String 展示:

Hello

对象Student中的数据展示:
姓名:${stu.name}
年龄:${stu.age}
价格:${stu.money}
<#--使用时间类型的参数,就要在前端指定需要使用的是什么类型的时间格式,date:年月日 time:时分秒 datetime:年月日时分秒 自定义时间格式:string("yyyy-MM-dd HH-mm-ss")--> 生日date:${stu.birthday?date}
生日time:${stu.birthday?time}
生日datetime:${stu.birthday?datetime}
生日string自定义时间:${stu.birthday?string("yyyy-MM-dd HH-mm-ss")}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号