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>
<think>好的,用户想知道如何集成和使用Freemarker模板引擎。首先,我需要回忆一下相关的知识,并参考提供的引用内容。根据引用[3],FreemarkerSpring Boot支持的模板引擎之一,尤其在Velocity不再被支持后变得更重要。用户可能是在开发Web应用,尤其是基于JavaSpring Boot的项目,所以需要具体的集成步骤和使用方法。 首先,我应该先介绍Freemarker的基本概念,比如它作为模板引擎的作用,生成文本输出,比如HTML网页。然后,分步骤讲解如何集成到项目中,特别是Web应用中的集成,这可能涉及添加依赖、配置模板路径等。根据引用[2],后续章节提到了与Web应用的集成,可能需要配置视图解析器,设置模板目录等步骤。 接下来,需要说明如何创建模板文件,比如.ftl文件的结构,变量插值,条件判断和循环等基本语法。然后,在Java代码中如何渲染模板,可能涉及Configuration类的配置,获取模板对象,处理数据模型,最后生成输出。 用户可能还想知道常见的配置选项,比如模板缓存、编码设置等,这些对于性能优化很重要,引用[2]提到性能优化会在后续章节讨论,所以这里可能需要简要提及。此外,示例代码会帮助用户更好地理解,比如展示一个Controller层使用Freemarker返回视图的例子,或者生成文本的例子。 另外,需要注意用户提到的引用内容,正确标注来源。例如,引用[1]说明Freemarker是模板引擎,用于生成输出文本,引用[3]提到Spring Boot集成的情况。需要确保回答中引用正确,比如在介绍Freemarker时引用[1],在集成部分引用[3]。 用户的问题可能还涉及实际开发中的常见问题,比如模板路径配置错误、变量未定义等,是否需要包含这些 troubleshooting 内容?不过根据用户的问题,重点是集成和使用,可能不需要深入问题排查,但可以提到一些常见配置项以避免错误。 最后,生成相关问题,比如性能优化、语法细节、与其他模板引擎对比等,这样用户可以有进一步学习的路径。根据示例中的问题,可能需要结构化相关问题,如集成步骤、基本语法、配置优化等方向。 现在需要组织这些思路,分步骤详细说明,确保结构清晰,符合用户要求的系统级指令,比如数学公式的正确格式,但这里可能不涉及数学内容。同时使用中文回答,保持自然流畅,引用正确的位置。</think>### 如何集成和使用 Freemarker 模板引擎 Freemarker 是一款基于模板和数据的文本生成工具,常用于生成 HTML 页面、配置文件等[^1]。以下是其在 Web 应用中的集成与使用步骤: --- #### 一、集成 Freemarker 到项目中 1. **添加依赖** 对于 Maven 项目,在 `pom.xml` 中添加以下依赖(以 Spring Boot 为例): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> ``` Spring Boot 2.0+ 默认支持 Freemarker,替代了不再维护的 Velocity[^3]。 2. **配置模板路径** 在 `application.properties` 或 `application.yml` 中设置模板目录和文件后缀: ```properties spring.freemarker.template-loader-path=classpath:/templates/ spring.freemarker.suffix=.ftl spring.freemarker.cache=false # 开发时关闭缓存,方便调试 ``` 3. **Web 应用中的角色** Freemarker 在 Web 项目中通常作为视图解析器(View Resolver),将后端数据动态渲染到前端模板[^2]。 --- #### 二、创建 Freemarker 模板文件 1. **模板基础语法** - **变量插值**:使用 `${variableName}` 插入变量。 - **条件判断**: ```html <#if user == "admin"> <p>管理员权限</p> <#else> <p>普通用户</p> </#if> ``` - **循环遍历**: ```html <#list items as item> <li>${item.name}</li> </#list> ``` 2. **示例模板(`hello.ftl`)** ```html <!DOCTYPE html> <html> <head> <title>${title}</title> </head> <body> <h1>欢迎, ${userName}!</h1> </body> </html> ``` --- #### 三、后端代码渲染模板 1. **Spring MVC 中的使用** 在 Controller 中返回模板名称,并传递数据模型: ```java @Controller public class HelloController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("title", "首页"); model.addAttribute("userName", "John"); return "hello"; // 对应 src/main/resources/templates/hello.ftl } } ``` 2. **非 Web 环境的使用** 手动配置 `Configuration` 并渲染模板: ```java Configuration cfg = new Configuration(Configuration.VERSION_2_3_31); cfg.setClassForTemplateLoading(this.getClass(), "/templates"); Template template = cfg.getTemplate("demo.ftl"); Map<String, Object> data = new HashMap<>(); data.put("message", "Hello Freemarker!"); try (StringWriter writer = new StringWriter()) { template.process(data, writer); System.out.println(writer.toString()); } ``` --- #### 四、常见配置优化 - **启用模板缓存**:生产环境中设置 `spring.freemarker.cache=true` 以提升性能[^2]。 - **自定义指令与宏**:通过 `<#macro>` 定义可复用的代码块,提升模板可维护性。 - **国际化支持**:结合 Spring 的 `MessageSource` 实现多语言模板。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值