SpringBoot集成freemarker模板
2019年8月30日 16:10 Java框架技术 评论

优势

SpringBoot默认支持的模板是thymeleaf,但是thymeleaf的写法真的是有一点点反人类,相比而言,freemarker显得比较简洁,功能也比较完善,也更符合从JSP过渡过来的猿们,因此本文来记述一下SpringBoot整合freemarker的过程。

POM文件

首先在POM中引入freemarker的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

YML/PROPERTIES配置文件

在application.yml中配置freemarker的相关配置,

spring
    freemarker:
      cache: false
      template-loader-path: classpath:/templates/ #模板文件路径
      suffix: .html #模板文件后缀
      expose-session-attributes: true
      expose-request-attributes: true
      expose-spring-macro-helpers: true
      charset: UTF-8
      settings:
        locale: zh_CN #本地化
        date_format: yyyy-MM-dd #日期格式化
        time_format: HH:mm:ss #时间格式化
        datetime_format: yyyy-MM-dd HH:mm:ss #日期时间格式化
        default_encoding: UTF-8 #默认编码
        auto_import: /common/common.html as common #自动引用

需要注意了,在没有代码提示的情况下,一定要注意:和后面的属性值中间有一个空格,千万别丢了,丢了就报错。properties配置文件要配置的属性和yml一样,自己转换就好了。

使用和测试

配置完之后就可以直接使用freemarker模板了,本文中就简单测试几个常用的和功能。

首先新建模板文件,比如我这里在resources的templates中创建index.html,注意,这里你要是使用的是flt格式的模板文件,在yml中配置的时候就是flt,我这里是用的是html,因此yml中后缀配置的是html,这里需要灵活采用你需要的配置。

我们让cotroller返回一个对象到模板页面,查询的过程不再赘述,这里只给出Controller方法,其他层的代码我想各位大佬都会的,我这里给出的是查询当前数据表中第一个用户的简单Controller。

    @RequestMapping("/find")
    public String all(ModelMap modelMap) {
        List<Account> accounts= accountService.getAllAccount();
        System.out.println(accounts.get(0).getName());
        modelMap.put("user",accounts.get(0));
        return "index";
    }

上述Controller中return的”index”就是模板视图的名称,SpringMVC视图解析器会根据你配置的yml中template-loader-path配置+return的”index”+suffix配置的后缀,来找到最后你要返回的模板页面,也就是resources的templates中的index.html文件,返回的对象就是modelMap.put("user",accounts.get(0));中的user,user的值就是我数据库表的第一个用户accounts.get(0)
在index.html中显示id+用户名+密码,按照如下方式编写

……
<body>
${ user.id },${ user.username },${ user.password }。
</body>
……

运行程序,访问127.0.0.1:8096/find,因为我的端口号是8096

可以看到成功使用freemarker解析了后台返回的对象,配置成功,后续会补上freemarker的详细用法,敬请期待。

评论
评论已暂时关闭。