千家信息网

FreeMarker入门知识点有哪些

发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,本文小编为大家详细介绍"FreeMarker入门知识点有哪些",内容详细,步骤清晰,细节处理妥当,希望这篇"FreeMarker入门知识点有哪些"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2025年11月17日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安全错误 数据库的锁怎样保障安全 软件开发的三个时代 海康监控时间服务器地址 要学计算机软件开发具备什么条件 无线网络技术第2版答案 四川计算机软件开发哪家正规 软件开发人才驻点开发多少钱 新增数据库某个文件组成 关于数据库新技术的介绍 管家婆的数据库 获取服务器数据失败 erp 应用程序中的服务器错误 软件开发专业研究 哪家的服务器比较好 密码编程学与网络安全第六版答案 网络安全评价单元测试一答案 网络安全法 保存 检测设备发送数据处理服务器 access数据库怎么设置格式 甘肃网络安全系统公司 国家网络安全手抄报简单 c 数据库实验对象名无效 宜格斯网络技术有限公司 怎么启动数据库 3g和4g网络技术的区别 江苏专业软件开发靠谱吗 计算机网络技术是什么系的 瘦客户机服务器搭建 中科汇投网络技术有限公司 江干区图腾网络服务器机柜 百度网络安全厉害吗
0