• 注册
  • 赞助本站

    • 微信
    • 支付宝
    • Q Q

    感谢一直支持本站的所有人!

    • 查看作者
    • 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
    • 102