Freemarker核心概念

久未见 提交于 2020-08-10 09:10:10

要自定义keycloak页面,必要先熟悉其采用的模板引擎freemarker,读懂base模板代码。要理解其工作原理及术语,方便交流,有选择的使用前端技术替换实现。

工作原理

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

模板引擎基于已经准备好的数据和模板来渲染HTML。数据放在多层嵌套的map结构中,当模板中使用点符号取数据,本质是一层层的从map中get。模板解析器会读取模板的字符,解析模板引擎的标签,表达式等,替换或生成对应的数据。

数据模型

为模板准备的数据整体被称作为 数据模型。 数据模型是树形结构,在Java中实现就是多层map。

变量

模型中的key,取出对应的value替换变量。

方法

方法变量在存于实现了 TemplateMethodModel 接口的模板中。

public class IndexOfMethod implements TemplateMethodModel {
	......
}

root.put("indexOf", new IndexOfMethod());

${indexOf("met", x)}

模板

.ftl文件,最简单的模板通常是普通的HTML文件,文件中自然可以包含html,css,js,vue代码。模板包含标签(指令),插值(表达式)和注释,不是这三部分的内容将被视为静态文本, 这些东西不会被FreeMarker所解析;会被按照原样输出出来。

表达式

格式为${...}, FreeMarker将会输出真实的值来替换大括号内的表达式,如**${latestProduct.url}**,则会从数据模型中查找对应的值。

指令

格式为<# > ,如**<#if user == "Big Joe">**,简单概括,指令包含逻辑判断,循环控制等。

注释

使用 <#-- and --> 来标识

内建函数

内建函数很像子变量(如果了解Java术语的话,也可以说像方法), 它们并不是数据模型中的东西,是 FreeMarker 在数值上添加的。 为了清晰子变量是哪部分,使用 ?(问号)代替 .(点)来访问它们。常用内建函数的示例:

user?html 给出 user 的HTML转义版本, 比如 & 会由 & 来代替。

user?length 给出 user 值中 字符的数量(对于 "John Doe" 来说就是8)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!