springboot整合freemarker案例

  • 1.pom.xml
  • 2.application.properties
  • 3.实体类
  • 4.controller
  • 5.取普通变量的值
  • 6.遍历集合
  • 7.遍历map
  • 7.转义,加r
  • 8.定义数值,且格式化数值
  • 9.定义布尔运算符
  • 10.三目运算符,用内置函数string实现
  • 11.字符串的拼接
  • 12.集合,map的拼接
  • 13.算术运算符
  • 14.比较运算符
  • 15.逻辑运算符
  • 16.分支语句
  • 17.内置函数
  • 18.如何判断某个变量为空?
  • 19.如何引入其他模板
  • 20.不解析内容
  • 21.自定义宏
  • 22.导入宏,并且使用宏

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.yl</groupId><artifactId>freemarker</artifactId><version>0.0.1-SNAPSHOT</version><name>freemarker</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><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.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.application.properties

server.port=8080
# freemarker的配置
#HttpServletRequest中的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-request-override=false
#HttpSession中的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-session-override=false
# 是否开启缓存
spring.freemarker.cache=false
# 是否检查模板位置
spring.freemarker.check-template-location=true
# 模板使用的编码
spring.freemarker.charset=utf-8
# content-type的值
spring.freemarker.content-type=text/html
# 是否将HttpServletRequest中的属性添加到model中
spring.freemarker.expose-request-attributes=false
# 是否将HttpSession中的属性添加到model中
spring.freemarker.expose-session-attributes=false
# 模板的后缀
spring.freemarker.suffix=.ftlh
# 模板存放的位置
spring.freemarker.template-loader-path=classpath:/templates/

3.实体类

package com.yl.freemarker.model;import java.io.Serializable;/*** @Author: wfj* @Description:* @Date: created in 2021/9/11 22:32* @Version: 1.0v*/
public class User implements Serializable {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

4.controller

package com.yl.freemarker.controller;import com.yl.freemarker.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;import java.util.*;/*** @Author: wfj* @Description:* @Date: created in 2021/9/11 22:33* @Version: 1.0v*/
@Controller
public class UserController {@GetMapping("/hello")public String hello(Model model) {List<User> users = new ArrayList<>();for (int i = 0; i < 10; i++) {User user = new User();user.setId(i);user.setName("xiaolan"+i);user.setAge(18);users.add(user);}Map<String,Object> map = new HashMap<>();map.put("name","yangl");map.put("age",20);map.put("salary",7000);model.addAttribute("info",map);model.addAttribute("sno","2020001");model.addAttribute("birth",new Date());model.addAttribute("users",users);return "hello";}
}

5.取普通变量的值

    <div>${sno}</div>

6.遍历集合

    <!--如何自定义集合并且遍历--><#list ['hello','java','jq'] as x><div>${x}</div></#list><!--创建一个存储着1到5数字的集合--><!--方式一--><#list 1..5 as x><div>${x}</div></#list><!--方式二--><#list 5..1 as x><div>${x}</div></#list><!--集合遍历--><#list users as user><tr><td>${user.id}</td><td>${user.name}</td><td>${user.age}</td><!--当前元素的索引--><td>${user_index}</td><!--当前元素后面是否还有元素--><td>${user_has_next?string('yes','no')}</td></tr></#list><!--只取某个元素的属性--><div>${users[1].age}</div><!--只遍历多少条数据,比如只遍历第2到第5条数据--><#list users[2..5] as user><tr><td>${user.id}</td><td>${user.name}</td><td>${user.age}</td></tr></#list>

7.遍历map

    <!--自定义map并且遍历--><#assign usermap={"name":"小兰","age":18}><!--遍历方式一:获取所有的key--><#list usermap?keys as key><div>${key}--${usermap[key]}</div></#list><!--遍历方式二:获取所有的value--><#list usermap?values as value><div>${value}</div></#list>

7.转义,加r

  <div>${r"C:\"}</div><div>${r"hello <b>vue</b>"}</div>

8.定义数值,且格式化数值

    <!--定义数值--><#assign price=99><!--格式化数值--><!--以人民币符号开头--><div>${price?string.currency}</div><!--以%号结尾--><div>${price?string.percent}</div>

9.定义布尔运算符

    <!--定义布尔类型变量--><#assign flag=true>

10.三目运算符,用内置函数string实现

   <!--三目运算符--><div>${flag?string('yes','no')}</div>

11.字符串的拼接

    <div>${'hello ${sno}'}</div><div>${'hello ' + sno }</div><div>${sno[0]}${sno[2]}</div><div>${sno[1..3]}</div>

12.集合,map的拼接

    <!--集合和map的相加拼接--><!--输出1,2,3,6,8,9--><#list [1,2,3]+[6,8,9] as x><div>${x}</div></#list><#list (info+{"message":"soho"})?keys as key><div>${key}</div></#list>

13.算术运算符

    <!--算术运算符--><div><#assign num=15><div>${num+10/1*7}</div></div>

14.比较运算符

<!--比较运算符--><!--if里面的条件成立,才显示内容--><div><#assign i=10><!--等于--><#if i = 10>i = 10</#if><!--不等于--><#if i != 10>i != 10</#if><!--等于--><#if i == 10>i == 10</#if><!--大于--><#if i gt 10>i gt 10</#if><!--大于等于--><#if i gte 10>i gte 10</#if><!--小于--><#if i lt 10>i lt 10</#if><!--小于等于--><#if i lte 10>i lte 10</#if></div>

15.逻辑运算符

    <!--逻辑运算符--><div><#assign b=20><#if (b gt 10 && b lt 100)>aaa</#if><#if !(b==10)>bbb</#if><#if (b == 100 || 1==1)>ccc</#if></div>

16.分支语句

<!--分支语句--><!--if else--><div><#assign score=50><#if score gt 90> A<#elseif score gt 80>B<#elseif score gt 60>C<#else>D</#if></div><!--switch case--><div><#assign b=90><#switch b><#case 10>10<#break><#case 20>20<#break><#case 30>30<#break><#default> 999</#switch></div>

17.内置函数

 <!--内置函数--><!--首字母大写--><div>${"hello"?cap_first}</div><!--字符串转小写--><div>${"hello"?lower_case}</div><!--字符串转大写--><div>${"hello"?upper_case}</div><!--去除字符串的空格--><div>${" hello "?trim}</div><!--类型转换--><div>${3.14566?int}</div><!--获取集合的大小--><div>${users?size}</div><!--格式化日期显示--><div>${birth?string("yyyy-MM-dd")}</div>

18.如何判断某个变量为空?

    <!--判空,判断变量qq是否为空,为空不会进入代码块--><!--如果不判空,会报错!--><#if qq??><div>qq</div></#if><!--防止出现空指针,可以通过如下方式加个默认值,或者空字符串也行--><div>${dd!"dd"}</div>

19.如何引入其他模板


20.不解析内容

    <!--不解析内容--><#noparse ><#include './student.ftlh'><div><#assign score=50><#if score gt 90> A<#elseif score gt 80>B<#elseif score gt 60>C<#else>D</#if></div></#noparse>

21.自定义宏

22.导入宏,并且使用宏

springboot整合freemarker案例相关推荐

  1. Springboot 整合jsp案例

    Springboot 整合jsp案例 关键词 war包方式部署到tomcat,注意依赖scope和内置tomcat的排除 项目架构 配置文件:application.properties server ...

  2. springboot整合redis案例——点赞取消点赞

    目录 springboot与缓存 JSR-107 Spring缓存抽象 重要概念和缓存注解 springboot整合redis 案例一:Redis是实现点赞.取消点赞 一.Redis 缓存设计及实现 ...

  3. springboot整合freemarker FTL stack trace (“~“ means nesting-related): - Failed at: #

    springboot整合freemarker FTL stack trace ("~" means nesting-related): - Failed at: 问题: 后台mod ...

  4. springboot整合freemarker(转)

    添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri ...

  5. Springboot整合freemarker和相应的语法

    FreeMarker 是⼀款 模板引擎: 即⼀种基于模板和要改变的数据, 并⽤来⽣成输出⽂本(HTML⽹⻚,⼦邮件,配置⽂件,源代码等)的通⽤⼯具. 是⼀个Java类库. FreeMarker 被设计 ...

  6. activeMQ基础学习和SpringBoot整合activeMQ案例

    昨天仔细研究了activeMQ消息队列,也遇到了些坑,昨天晚上也写了篇文章记录坑的内容,其实上篇文章(SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNO ...

  7. SpringBoot整合Freemarker+Mybatis

    开发工具 , 开始 新建工程 .选择Spring Initializr 下一步 下一步,选择需要的组件 ..改一下工程名,Finish ..目录结构 首先,修改pom文件 然后,将applicatio ...

  8. Springboot整合FreeMarker

    目录 一.Freemark介绍 1.freemark介绍 2.freemark构建 1.首先要构建一个freemark工程 2.导入pom依赖,更改资源文件 3.新建index界面 4.测试: 二.F ...

  9. springboot 整合 freemarker前端模板引擎实现数据展示

    一.freemaker 1.简介 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户 ...

最新文章

  1. 如何简单学会ajax,学会自己封装简单AJAX
  2. 一致性hash算法简介
  3. 在C++中for、if...内定义的变量在其之外就失效了~
  4. LeetCode_111.二叉树的最小深度
  5. Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
  6. 模板库 | 销售管理类报表,邀您提反馈
  7. oracle11g 密码大小写禁用及密码有效期限制
  8. python不相等的两个字符串的 if 条件判断为True
  9. makefile教程链接
  10. 【clickhouse】clickchouse的分区合并速度小于插入速度会怎么样
  11. 【FastJson】FastJson一个Bug java.util.LinkedHashMap cannot be cast to com.alibaba.fastjson.Jsonobject
  12. 数据结构与算法之一快速排序
  13. Pheatmap做热图数据处理过程
  14. android实现qq登录功能实现原理,Android实现QQ登录功能
  15. 图:航大之星礼仪大赛圆满结束.
  16. 哈曼基于英特尔计算平台(Apollo Lake和ACRN)展示新一代“智能驾驶舱”
  17. 基于群晖DS216+II的家庭存储解决方案
  18. 5.4、聚类之EM聚类实例
  19. uchome持久XSS(2.0版本测试通过)
  20. 微信小程序js数组倒序reverse

热门文章

  1. Dll依赖与被依赖关系查看工具【1】
  2. 事件订阅发布 JavaScript 库 onfire.js
  3. 蓝牙透传模块HC-08使用教程与简单应用
  4. 利用Dropbox搭建Git远程仓库
  5. Nuget本地临时缓存路径处理
  6. php通讯录系统,企业通讯录管理系统
  7. Revit 学习资源
  8. SpringBoot整合RabbitMQ 访问保错: reply-text=NOT_ALLOWED - access to vhost '/' refused for user 'cuit'
  9. 递归求阶乘和--PTA
  10. pr字幕模板 紫色笔刷背景标题字幕条PR模板