Freemarker模板语言指南:语法与实战

需积分: 35 2 下载量 100 浏览量 更新于2024-09-16 收藏 12KB TXT 举报
"Freemarker常用语法" Freemarker是一个强大的模板引擎,常用于Java Web应用中生成动态HTML、XML或其他格式的文本。它提供了一种简洁的语法,允许开发者在模板中混合业务数据和视图逻辑。以下是对标题和描述中提到的Freemarker常用语法的详细解释: 1. 对象输出与空值处理 - `${book.name}` 用于输出对象`book`的`name`属性值。 - `${book.name?if_exists}` 如果`name`存在则输出,否则不显示任何内容。 - `${book.name?default('xxx')}` 当`name`为空或不存在时,显示默认值`xxx`。 - `${book.name!"xxx"}` 类似于`?default`,但当`name`不存在时会抛出异常。 2. 数据格式化 - `${book.date?string('yyyy-MM-dd')}` 将`date`属性转换为指定格式的字符串,如'2022-01-01'。 - `${book?string.number}` 将`book`对象转换为数字字符串,例如'20'。 - `${book?string.currency}` 格式化为货币形式,例如'$20.00'。 - `${book?string.percent}` 格式化为百分比形式,例如'20%'。 3. 布尔值插入 - `<#assign foo = true/>` 定义变量`foo`并赋值为`true`。 - `${foo?string("yes", "no")}` 如果`foo`为`true`,输出'yes';如果为`false`,输出'no'。 4. 逻辑判断 - if-elseif-else 结构用于条件判断,如`<#if condition>...<#elseif condition2>...<#else>...<#endif>`。 - `??` 空值判断,如`<#if book.name??>`,检查`name`是否存在。 5. switch-case结构 - `<#switch value>` 用于基于不同情况执行不同代码块。 - `<#case refValue1>...<#break>` 当`value`等于`refValue1`时执行相应代码,`<#break>`用于跳出switch语句。 - `<#default>` 当没有匹配的`case`时执行的代码。 6. 循环读取 - `<#list sequence as item>` 用于遍历序列(如列表、数组),`item`是当前元素的别名。 - `<#if bookList?size=0>` 检查`bookList`的长度是否为0,如果是,则不执行循环。 - 示例:`<#list employees as e>${e_index}.${e.name}</#list>` 输出员工的索引和名字。 7. 宏/模板宏 (Macro) - 宏是可重用的模板片段,可以通过`<#macro>`定义。 - `<#macro greet>` 定义名为`greet`的宏,如示例中的打招呼宏。 - 宏可以带参数,如`<#macro greet person>`,在调用时传递参数,如`<@greet 'John'/>`。 - 调用宏使用`@`符号,例如`<@greet person='Alice'/>`。 以上是Freemarker的一些基础语法,它们帮助开发者构建动态模板,实现数据与视图的分离,提高代码复用性和可维护性。在实际应用中,Freemarker还提供了更多高级特性,如内置函数、控制结构和自定义指令等,使得模板的编写更为灵活和强大。