freemark 使用笔记

本文介绍了Freemarker模板引擎中的关键技巧,包括如何处理空值、判断字符串是否为空、使用运算符避免未赋值错误、比较不同类型变量的方法及数值格式化等。通过具体示例展示了这些技巧的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、空值处理运算符

FreeMarker的变量必须赋值,否则就会抛出异常。而对于FreeMarker来说,null值和不存在的变量是完全一样的。FreeMarker提供两个运算符来避免空值:
1. !:指定缺失变量的默认值;

2. ??:判断变量是否存在。

这两个符号的用法看下面的例子

2、判断字符串是否为空

<#if item.icon?? && item.icon !="">
   <i class=item.icon></i>
 </#if>

3、在页面里面用!避免变量没有赋值的错误

<input type="text" class="form-control" placeholder="上级组织" data-rule-maxlength="20" autocomplete="off" value="${(orgName)!''}" >

时间类型的变量

<input type="text" class="form-control"  value='${(org.invalidTime?string("yyyy-MM-dd "))!""}' />

4、freemarker允许同类型的向比较,Allowed comparisons are between two numbers, two strings, two dates, or two booleans。不同类型的不能比较或+ - * /运算。

<#if org.type??&&org.type?c==orgType.code>selected</#if>

其中org.type?c==orgType.code,org.type是int类型,orgType.code是字符类型,两者不能比较,?c转成字符串后进行比较。

5、decimal,BigDecimal类型的变量在freemarker中的表示,千分位、小数点后面的位数表示方法如下

<input type="text" value="${(lat?string(',##0.0000000000'))!''}">

6、Boolean类型的展示

<input type="hidden" name="flag" id="approveFlag" value='${form.flag?string("true","flase")}'>

 

<think>我们正在处理用户关于Freemarker模板使用教程和示例的请求。根据引用内容,Freemarker是一个模板引擎,用于生成文本输出(如HTML、配置文件等)。它结合模板文件(包含静态内容和动态标记)和数据模型来生成输出。 我们将按照以下结构组织回答:1.Freemarker模板基础介绍2.模板文件结构3.常用语法(变量、条件、循环等) 4.示例代码5.实际应用场景同时,根据系统指令,我们需要在行内数学表达式使用$...$,独立公式使用$$...$$(但本问题不涉及数学公式,所以主要关注代码和文字描述)。另外,我们将在回答末尾生成相关问题。注意:引用内容中提供了部分信息,我们将结合这些信息进行回答,并在适当位置添加引用标识。 现在开始构建回答:</think>### Freemarker模板使用教程与示例 #### 一、基础概念 Freemarker是一款**模板引擎**,通过将模板文件(包含静态内容+特殊标记)与数据模型结合,动态生成文本输出(HTML/配置文件/代码等)[^4]。核心组件: 1. **模板文件**(.ftl):混合静态内容和动态指令 2. **数据模型**(Java对象/Map):提供动态数据 3. **配置引擎**(`Configuration`):管理模板加载和设置 #### 二、模板文件结构 ```html <!DOCTYPE html> <html> <head> <title>${pageTitle}</title> <!-- 插值表达式 --> </head> <body> <#-- 注释:不会输出到结果 --> <#if user.loggedIn> <!-- 指令 --> 欢迎, ${user.name}! <#else> <a href="/login">登录</a> </#if> <ul> <#list products as product> <!-- 循环指令 --> <li>${product.name} - 价格: ¥${product.price?string("0.00")}</li> </#list> </ul> </body> </html> ``` #### 三、核心语法详解 1. **插值表达式** `${variable}` 输出变量值,支持运算: `${price * 1.08}` <!-- 计算含税价 --> `${name!"默认值"}` <!-- 空值处理 --> 2. **常用指令** ```html <#-- 条件判断 --> <#if score >= 90> 优秀 <#elseif score >= 60> 合格 <#else> 不合格 </#if> <#-- 循环遍历 --> <#list ["苹果", "香蕉", "橙子"] as fruit> ${fruit?index + 1}. ${fruit?cap_first} </#list> ``` 3. **函数与处理** ```html ${date?string("yyyy-MM-dd")} <!-- 日期格式化 --> ${text?upper_case} <!-- 转大写 --> ${htmlContent?no_esc} <!-- 禁用HTML转义 --> ``` #### 四、Java集成示例 ```java // 配置模板引擎 Configuration cfg = new Configuration(Configuration.VERSION_2_3_31); cfg.setDirectoryForTemplateLoading(new File("/templates")); // 模板路径[^2] // 准备数据模型 Map<String, Object> data = new HashMap<>(); data.put("pageTitle", "商品列表"); data.put("products", Arrays.asList( new Product("手机", 2999), new Product("笔记本", 5999) )); // 处理模板 try (Writer out = new FileWriter("output.html")) { Template template = cfg.getTemplate("product_list.ftl"); template.process(data, out); // 生成最终文件 } ``` #### 五、高级特性 1. **宏定义**(可复用组件) ```html <#macro userCard user> <div class="card"> <h3>${user.name}</h3> <p>邮箱: ${user.email}</p> </div> </#macro> <@userCard user=currentUser /> <!-- 调用宏 --> ``` 2. **错误处理** ```html <#attempt> 可能出错的代码 <#recover> 错误处理逻辑 </#attempt> ``` 3. **包含子模板** ```html <#include "header.ftl"> ``` #### 六、典型应用场景 1. Web开发:动态生成HTML页面(替代JSP) 2. 代码生成:自动创建Controller/Entity类[^2] 3. 报表系统:导出格式化Excel/PDF 4. 邮件模板:个性化邮件内容 > 最佳实践:将模板文件存放在`resources/templates`目录,通过`ClassTemplateLoader`加载[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值