1. FreeMarker的List指令
<#list sequence as item> Part repeated for each item <#else> Part executed when there are 0 items </#list>
- else:可选,代表如果没有迭代数据的话,就展示else的内容
- sequence:你要迭代的数据变量名
- item:迭代项的变量名
- 语法2(从FreeMarker 2.3.23版本开始):
<#list sequence> Part executed once if we have more than 0 items <#items as item> Part repeated for each item </#items> Part executed once if we have more than 0 items <#else> Part executed when there are 0 items </#list>
当你想在list指令里面使用列表、表格等标签时,若不嵌套items指令,当数据没内容,则会输出空列表,所以我们使用items来避免出现空列表和空表格在HTML页面上;
- sequence:你要迭代的数据变量名
- item:迭代项变量名
- 要点3 - sep指令
<#list users as user> <div> ${user}<#sep>, </#sep> </div> </#list>
简写如下
<#list users as user>${user}<#sep>, </#list>
当你需要在每一个迭代项中间放一些内容的时候,我们可以使用sep指令(插入的内容不能在第一项之前或最后一项之后)
- 要点4 - break指令
在任意迭代过程中跳出,配合if指令一起使用
<#list 1..10 as x> ${x} <#if x == 3> <#break> </#if> </#list>
- 要点5 - list中的排序
- 升序:
sort_by()
语法:<#list list?sort_by("字段") as x> </#list>
- 降序:
sort_by()?reverse
语法:<#list list?sort_by("字段")?reverse as x> </#list>
- 要点:list遍历Map:
语法:
<#list dataMap?keys as key> <option value="${key}">${dataMap[key]}</option> </#list>
2. FreeMarker的内建函数
-
官网 https://freemarker.apache.org/docs/ref_builtins_alphaidx.html
-
内建函数的特点
都是书写在 “ ? ” 后面,且都能实现某个功能(函数) -
什么叫内建函数
1.所谓内建函数,就是由语法规定存在的函数。这些函数,包含在编译器的运行时库中,程序员不必单独书写代码实现它,只需要调用既可,而他们的实现,由该编译器对应的厂商完成。
2.简单的说,就是不需要引入任何外部资源就可以使用的函数 -
内建函数参考
3. SpringBoot 集成 FreeMarker
- 创建SpringBoot 项目
- 引入相关依赖 (仅罗列需要的)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
- 修改application.properties
#mysql的配置信息 spring.datasource.url=jdbc:mysql://localhost:3306/cloud_study?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.username=#### spring.datasource.password=#### spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.freemarker.suffix=.ftl
- 创建Emp实体类
package cn.lazyfennec.springbootfreemarker.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author: Neco
* @Description:
* @Date: create in 2022/5/4 9:41
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Emp {
private int empno;
private String ename;
private String job;
private Integer mgr;
private Integer sal;
private Integer comm;
private Integer deptno;
}
- 创建 EmpRepository
package cn.lazyfennec.springbootfreemarker.repository;
import cn.lazyfennec.springbootfreemarker.entity.Emp;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author: Neco
* @Description:
* @Date: create in 2022/5/4 9:42
*/
@Repository
public interface EmpRepository {
@Select("select empno,ename,sal,job,comm,mgr,deptno from emp")
List<Emp> findAll();
}
- 创建EmpController
package cn.lazyfennec.springbootfreemarker.controller;
import cn.lazyfennec.springbootfreemarker.entity.Emp;
import cn.lazyfennec.springbootfreemarker.repository.EmpRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* @Author: Neco
* @Description:
* @Date: create in 2022/5/4 9:39
*/
@Controller
public class EmpController {
@Autowired
private EmpRepository empRepository;
@RequestMapping("/show")
public String showAll(HttpSession session) {
System.out.println(1111);
List<Emp> empList = empRepository.findAll();
session.setAttribute("emplist", empList);
return "list";
}
}
- xxxApplication 新增 MapperScan 注解
@MapperScan(basePackages = "cn.lazyfennec.springbootfreemarker.repository")
@SpringBootApplication
public class SpringbootFreemarkerApplication {
- resources -> templates 下创建 list.ftl
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<title>登陆页面</title>
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
<!-- popper.min.js 用于弹窗、提示、下拉菜单 -->
<script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<table class="table table-dark table-hover">
<thead>
<tr>
<th>empno</th>
<th>ename</th>
<th>job</th>
<th>sal</th>
<th>mgr</th>
<th>comm</th>
<th>deptno</th>
</tr>
</thead>
<tbody>
<#list emplist as emp>
<tr>
<td>${emp.empno}</td>
<td>${emp.ename}</td>
<td>${emp.job}</td>
<td>${emp.sal}</td>
<td>${emp.mgr!"没有上司"}</td>
<#-- <td>${emp.comm!"没有奖金"}</td>-->
<td>
<#if emp.comm??>
<#if emp.comm=0>
奖金为零
<#else>
${emp.comm}
</#if>
<#else>
没有奖金
</#if>
</td>
<td>${emp.deptno}</td>
</tr>
</#list>
</tbody>
</table>
</div>
</body>
</html>
- 测试

如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~
网友评论