千家信息网

FreeMarker入门知识点有哪些

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"FreeMarker入门知识点有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"FreeMarker入门知识点有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2026年11月02日FreeMarker入门知识点有哪些

本文小编为大家详细介绍"FreeMarker入门知识点有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"FreeMarker入门知识点有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

FreeMarker是一款基于java的模版引擎,用于生成文本(比如HTML)。它的语法和作用和JSP类似,JSP需要依赖Servlet容器(如Tomcat),而FreeMarker只需要Java运行环境。

官方网站上的这张图很形象的说明了FreeMarker的用途和工作原理:模版+数据=文本(HTML)

在Jspxcms中,模版就是/template/1/default/目录下的模版文件(后缀也是.html),数据来自SpringMVC Controller的Model.addAttribute(String name, Object value)或者Jspxcms自定义标签(如:[@InfoList node='news';list]...[/@InfoList])。

更多资料可以参考FreeMarker官方网站的文档,FreeMarker官方还提供了FreeMarker中文文档。

表达式

和JSP的EL表达式基本是一样的:${myname},${user.username}。

  • 获取Map值。${customs['abc']}

  • 获取数组值。${arr[0]}

  • 算术运算。+ - * / %。如:${100 - x*x} ${x/2} ${12}

  • 比较运算。< <= >= > == = != 或者 lt lte gt gte

  • 逻辑运算。|| && !

内建函数(Built-in)

内建函数是FreeMarker的一大优势,很多在JSP里面需要通过复杂处理才能实现的功能,这里只需要用简单的内建函数就搞定了。

  • null值处理。${mouse!"No mouse"} ${username!"匿名用户"}。FreeMarker中输出null值会报错,如果希望对象为null时,什么都不显示且不报错,可以这样处理 ${mouse!} ${user.username!} ${(user.username)!}(最后一种方式可以避免user对象为null导致的错误)。

  • 布尔值处理。${foo?string("yes", "no")}

  • 日期处理。${lastUpdated?string("yyyy-MM-dd HH:mm:ss")}

  • HTML转义。${username?html}。为避免直接输出< >等值,导致XSS攻击,通常会对输出的值进行转义。

  • JS转义。${foo?js_string}。对js中的引号等字符进行处理,给js变量赋值是非常有用,比如var s = "${foo?js_string}"。

  • 获取子串。${'abc'?substring(2)} ${username?substring(0,3)}

  • 获取字符串长度。${'abc'?length} ${username?length}

  • 获取列表大小。${list?size}

  • 小写转换。${"GrEeN MoUsE"?lower_case}

  • 大写转换。${"GrEeN MoUsE"?upper_case}

标签(Directive)

FreeMarker标签类似JSP标签。标签默认使用尖括号< >,在Jspxcms中为了避免和HTML标签混淆,便于在Dreamweaver中编辑,使用中括号[ ]作为标签符号。以下示例一律使用中括号。

标签有两种,一种是系统自带标签,以[#开头;一种是自定义标签,以[@开头。

注释标签:[#-- 这是需要注释的代码 --]

自定义标签

以InfoList标签为例说明。

[@InfoList node='news';infos]    [#list infos as info]        ${info.title}    [/#list][/@InfoList][@InfoList node='news';list]    [#list list as bean]        ${bean.title}    [/#list][/@InfoList][@InfoList;list]    [#list list as bean]        ${bean.title}    [/#list][/@InfoList]
  • 标签名称InfoList。用于获取文档列表的标签。

  • 参数node='news'。node是参数名,'news'是参数值。意为获取栏目代码为news的文档。有时候参数不是必须的。

  • 返回值;infos。分号;后面的是返回值。infos是标签返回的对象。标签获取的文档列表就存放在这个对象里,这个对象的名称可以随意定义。

if(判断标签)

[#if 2>1]  ...[#elseif username=="abc"]  ...[#elseif username?starts_with("red")]  ...[#else]  ...[/#if]

判断是否为null:[#if username??]...[/#if]

list(列表标签)

[#list sequence as item]    ...[/#list][#list 1..10 as i]    ...[/#list]
  • 获取循环的序号${item_index} ${item_index + 1}。

  • 判断是否还有下一个对象[#if item_has_next]...[/#if]

  • sequence as item和item_index、item_has_next中的item必须一致,如果sequence as info,则用${info_index}、${info_has_next}。

break(跳出标签)

[#list seq as x]    ${x}    [#if x = "spring"][#break][/#if][/#list]

include(包含标签)

[#include "/common/copyright.ftl"][#include "/common/navbar.html" parse=false /]
  • parse。布尔值,默认true。是否解析包含的模版。如果想包含一个纯文本的文件,不解析里面的内容,可以设置为false。

assign(定义变量标签)

[#assign myname="abc"][#assign myname=username][#assign myname]孔子[/#assign]

escape(转义标签)

为了避免跨站脚本攻击(XSS),通常会对输出的内容做HTML转义,比如${foo?html}。但是所有变量都要做这个转义不仅麻烦,还容易遗忘。另外FreeMarker空值处理也很麻烦且容易遗忘,比如${foo!}、${(user.username)!}。

使用excape标签可以很好的解决这个问题。

[#escape x as (x)!?html]    ...    ${user.username}    ...[/#escape]

只要被这个标签包含的代码,都相当于加上了${(foo.bar)!?html},如${user.username}相当于${(user.username)!?html}。即包含了空值处理,也包含了HTML转义处理。

noescape(不转义标签)

在escape标签内有对象不需要转义时,可以用noescape标签。

[#escape x as (x)!?html]    ...    [#noescape]${text}[/#noescape]    ...[/#escape]

读到这里,这篇"FreeMarker入门知识点有哪些"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

标签 处理 转义 对象 文档 模版 知识 知识点 内容 参数 输出 代码 函数 变量 官方 文本 文章 运算 名称 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 中智农互联网科技 江苏根荣互联网科技 为想互联网科技怎么样 互联网是不是新科技 关于新基建和互联网科技 有马互联网科技 广州互联网络科技有限公司 恒生科技互联网指数分析 哈尔滨新华互联网科技学院 银川新华互联网科技职业技术培训学校图片 呼和浩特新华互联网科技学院 互联网保险科技创业 互联网新科技动漫ppt素材 互联网科技和法律行业 恒生互联网科技业指数调整周期 合肥互联网科技公司公章图片 小米互联网科技园入驻 众联互联网络科技 知域互联网科技有限公司官网 互联网科技卖菜 互联网医疗科技 汉立互联网科技有限公司联系电话 互联网科技博主是什么意思 互联网对科技的发展 阿大互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 互联网科技的全部知识 电子商务与互联网科技的关系 现代互联网科技公司
0