FreeMarker语法详解与示例

需积分: 9 12 下载量 42 浏览量 更新于2024-09-20 收藏 7KB TXT 举报
"FreeMarker 是一个强大的模板引擎,用于生成文本输出,如 HTML、XML 或其他任何基于文本的格式。它被广泛应用于Web应用程序中,作为JSP的替代方案,提供更简洁、更易于维护的视图层。FreeMarker与Java紧密集成,但模板本身不包含任何Java代码,而是使用特定的FreeMarker语法来表达数据和控制结构。" 在FreeMarker中,主要的语法元素包括变量表达式、三元操作符、字符串格式化以及控制结构等。以下是对这些知识点的详细说明: 1. 变量表达式:FreeMarker使用`${expr}`来表示变量。例如`${book.name}`将尝试获取并输出`book`对象的`name`属性。如果属性不存在,FreeMarker默认会输出空字符串。 2. 三元操作符: `${expr?if_exists}`用于检查表达式是否存在,如果存在则输出其值,否则不输出任何内容。`?default(value)`操作符允许指定一个默认值,如`${book.name?default('unknown')}`,当`book.name`不存在时,将输出`unknown`。 3. 字符串格式化:`?string(format)`操作符可以将变量转换为特定格式的字符串。例如`${book.date?string('yyyy-MM-dd')}`将日期转换为指定的日期格式。 4. 数字格式化:`?string.number`用于将数字格式化为特定类型,如货币或百分比。`?string.currency`输出货币格式,`?string.percent`输出百分比格式。 5. 控制结构: - `<#if condition>`:如果条件为真,则执行模板内的代码。 - `<#elseif condition2>`:在`<#if>`之后,如果条件2为真,则执行代码。 - `<#else>`:在所有`<#if>`和`<#elseif>`都为假的情况下执行。 - `<#switch value>`和`<#case refValue>`:用于多分支判断,类似于Java中的switch语句。 - `<#list items as item>`:遍历集合或数组,`item`是当前项,可用`item_index`获取索引,`item_has_next`检查是否还有下一项。 - `<#break>`:跳出当前循环或switch结构。 6. 特殊功能: - `cap_first`:首字母大写,如`${name?cap_first}`。 - `lower_case`:全部转为小写,如`${word?lower_case}`。 - `trim`:去除字符串两端的空白。 - `Sequences()`和`size`:检查序列的长度。 - `int`:将浮点数转换为整数,如`${number?int}`。 7. 闭包(Closure):FreeMarker支持自定义函数,可以通过`<#function>`定义,然后在模板中调用。 8. JSTL集成:FreeMarker可以与JSTL标签库配合使用,例如`<c:forEach>`等,提供更多的迭代和条件处理能力。 FreeMarker的灵活性和强大的表达能力使其成为Java Web开发中一个不可或缺的工具,能够帮助开发者高效地生成动态内容,同时保持模板和业务逻辑的分离。通过学习和熟练掌握FreeMarker语法,你可以创建更加清晰、易于维护的视图层代码。