Spring Boot FreeMarker 使用教程(if, else, elseif,list,map)

1 FreeMarker 简介(中文官网地址http://freemarker.foofun.cn/index.html)

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
在这里插入图片描述
这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。

而FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,它没有被绑定到 Servlet或HTML或任意Web相关的东西上。它也可以用于非Web应用环境中。
FreeMarker 是 免费的, 基于Apache许可证2.0版本发布。

2.2 编辑 Pom.xml 引入依赖

环境:springboot 2.2.0.RELEASE

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

注意 :Spring Boot 中默认不需要做任何配置。

2.3 编写最简单的示例代码

IndexController.java

/**
 * 在是一个普通的 Controller 类
 * */
@Controller
public class IndexController {


    /**
     * 路由 /index
     * 返回 index 这里默认配置自动映射到 templages/index 
     * */
    @RequestMapping("/index")
    public String index(Model model){
        model.addAttribute("welcome","hello fishpro");
        return "index";
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
this is welcome ${welcome}
</body>
</html>

2.4 运行示例

在浏览器中输入 http://ip:端口/index 显示为,hello fishpro 就是后台输出的 model 对象

this is welcome hello fishpro

2.5 复杂的指令示例

2.5.1 if, else, elseif

<#if condition>
  ...
<#elseif condition2>
  ...
<#elseif condition3>
  ...
...
<#else>
  ...
</#if>
<#if x == 1>
  x is 1
<#elseif x == 2>
  x is 2
<#elseif x == 3>
  x is 3
<#elseif x == 4>
  x is 4
<#else>
  x is not 1 nor 2 nor 3 nor 4
</#if>

2.5.1 list<实体类>类型遍历 并根据实体类中的某个属性排序

<#list formattributes?sort_by("queryorder")  as formattribute>
	<#if formattribute.isqueryfield == 1>
		<#if formattribute.formuitype == "文本">
			<#if (formattribute.ispkfield)??>//判断是否为空
			...
			<#else>
			...
			</#if>
		<#elseif formattribute.formuitype == "下拉">
		...
		<#elseif formattribute.formuitype == "时间">
			//或者||    并且&&   !非
			<#if formattribute.fieldtype == "DATETIME" || formattribute.fieldtype == "DATE">
					field_${formattribute.vueLabel}: null,
			</#if>
		</#if>
	</#if>
</#list>

2.5.2 Map<String, List<Map<String, Object>>>格式遍历

<#list map?keys as key> 
		<#assign item = map[key]>    
		<#list item as itemMap>
		{
				<#list itemMap?keys as cateKey>	
						  <#if cateKey="value">
						  	value: '${itemMap[cateKey]}',
						  </#if>
						  <#if cateKey="label">
						  	label: '${itemMap[cateKey]}'
						  </#if>	
                   </#list>	
            },       
		</#list>
</#list> 

2.5.3 Map<String, List>格式遍历

<#list gourpLinkedMap?keys as key>
		<#assign linkedMapList = gourpLinkedMap[key]>    
		<#list linkedMapList as linked>
			<#if !treeNodeStr?seq_contains(linked) >
				change${linked}(){
					<#list linkedMapList as linked2>
						<#if linked2?index gt linked?index>
							this.editTreeDate.${linked2} = ''
						</#if>
						<#if linked2?index == linked?index+1>
							this.get${linked2}List()
						</#if>
					</#list>
				},
            </#if>
		</#list>
	</#list>
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页