• 中文
    • English
  • 注册
  • 查看作者
  • Freemarker快速入门

    一.  前言

    最近公司的一个项目采用的是freemarker模板引擎,正好借此机会快速入门一下freemarker。

    和thymeleaf一样,freemarker作用也是为了将用户界面与业务数据分离。关于thymeleaf的快速入门教程,请查看本站《》SpringBoot:关于thymeleaf的简单使用》一文。

    二.  快速入门

    以SpringBoot为例,首先在pom.xml中添加freemarker的相关依赖:

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

    1.  封装数据

    接下来准备再一个简单的页面index.html,在resources下的templates文件下,新建index.html (注意,网上有的教程这里会让创建index.ftl文件,但是更建议使用html后缀,使用html后缀也非常简单,只需要在yml中配置suffix为html即可)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div>
        欢迎${user.age}岁的:${username}
    </div>
    </body>
    </html>

    编写对应的controlle,并在controller中向request作用域中添加一个字符串和一个User类对象

    @GetMapping("/index")
    public String index(Model model) {
        User user = new User();
        user.setAge(21);
        model.addAttribute("username","zhangjia");
        model.addAttribute("age",user.getAge());
        return "/audit/index";
    }

    User类:

    public class User {
        private String name;
        private int age;
        private int gender;
        //省略getter,setter
    }

    此时访问http://localhost:8088/audit/index,页面显示:欢迎21岁的zhangjia。

    这里有一个坑需要记录一下,一开始的时候为了图方便,直接在controller中创建了一个内部类,并且没有添加getter方法,这两个操作都会导致在index.html中无法获取user的age值

    2.  判断

    修改controller为以下内容:

    @GetMapping("/index")
    public String index(Model model) {
        User user = new User();
        user.setGender(1);
        model.addAttribute("user",user);
        return "/audit/index";
    }

    假设gender的值为1代表男,值为2代表女,则可以使用if在html中显示相应的性别。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div>
        您的性别为:
        <#if user.gender==1> 男
        <#elseif user.gender==2> 女
        <#else> 其他
       </#if>
    </div>
    </body>
    </html>

    此时访问该页面,显示您的姓名为:男

    3.  循环

    修改controller为以下内容:

    @GetMapping("/index")
    public String index(Model model) {
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setAge(i);
            users.add(user);
        }
        model.addAttribute("users",users);
        return "/audit/index";
    }

    在index.html中 ,将controller中的十个用户的age输出:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div>
        <#list users as user>
        ${user.age}<br>
        </#list>
    </div>
    </body>
    </html>

    此时访问该页面,显示内容为:0123456789

    三.  其他功能

    1. 关闭缓存

    在thymeleaf中,当我们的html页面变动后,如果没有关闭缓存,那么只能通过重启Tomcat来使变动生效,freemarker也是一样的,需要我们手动去关闭模板的检测,在application.yml中,添加以下内容即可:

     spring:   
        freemarker:
          template_update_delay: 0 # 不检测模板

    2.  字符串截取 : 

    通过下标直接获取下标对应的字母: ${name[2]}

    起点下标..结尾下标截取字符串:${name[0..5]}

    3.  ! 指定缺失变量的默认值;一般配置变量输出使用,比如${userId!”错误”}意为如果userId不存在,则显示错误

    参考资料

    FreeMarker快速入门

    山东省·日照市
  • 0
  • 0
  • 0
  • 1.7k
  • zjmarina

    请登录之后再进行评论

    登录
    单栏布局 侧栏位置: