例子,实现求字符串的长度。
import java.util.List; import freemarker.template.SimpleNumber; import freemarker.template.TemplateMethodModel; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; public class StringLengthMethod implements TemplateMethodModel { public TemplateModel exec(List args) throws TemplateModelException { if (args.size() != 1) { throw new TemplateModelException("Wrong arguments"); } return new SimpleNumber(((String) args.get(0)).length()); } }
import java.io.File; import java.io.IOException; import java.io.Writer; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; /** * * 模板工具类 */ public class FreeMarkertUtil { /** * @param templatePath 模板文件存放目录 * @param templateName 模板文件名称 * @param root 数据模型根对象 * @param templateEncoding 模板文件的编码方式 * @param out 输出流 */ public static void processTemplate(String templatePath, String templateName, String templateEncoding, Map<?,?> root, Writer out){ try { Configuration config=new Configuration(); File file=new File(templatePath); //设置要解析的模板所在的目录,并加载模板文件 config.setDirectoryForTemplateLoading(file); //设置包装器,并将对象包装为数据模型 config.setObjectWrapper(new DefaultObjectWrapper()); //获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致 Template template=config.getTemplate(templateName,templateEncoding); //合并数据模型与模板 template.process(root, out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); }catch (TemplateException e) { e.printStackTrace(); } } }
import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.Map; /** * * 客户端测试模板输入类 */ public class ClientTest { public static void main(String[] args) { Map<String,Object> root=new HashMap<String, Object>(); root.put("length", new StringLengthMethod()); FreeMarkertUtil.processTemplate("src/templates","demo01.ftl", "UTF-8", root, new OutputStreamWriter(System.out)); } }
模板文件demo01.ftl如下:
${length("取字符串长度")}
相关推荐
10. **自定义标签(Custom Tags)**:如果需要集成其他框架(如Spring MVC)的标签,可以创建自定义标签,扩展Freemarker的功能。 在“freemarker学习例子”中,你可能看到如何设置数据模型、创建简单的模板、使用...
本篇将深入讲解Freemarker的内置函数,结合实际例子,帮助你更好地理解和运用这些功能。 一、变量与表达式 在Freemarker中,变量的引用使用`${}`,例如 `${name}` 将输出变量name的值。表达式可以是简单的变量引用...
此外,FreeMarker还支持条件语句(`<#if>`、`<#else>`、`<#else if>`)、循环(`<#list>`)、函数调用(`<@...>`)等复杂逻辑,使得模板文件可以生成更丰富的输出。 为了运行这个例子,你需要: 1. 解压`FreeMarker...
这个例子可以作为基础,通过引入更多的FreeMarker特性,如条件语句、循环结构、自定义函数等,来增强模板的功能。同时,可以通过优化Servlet的性能,如使用缓存、异步处理等手段,提高整个应用的响应速度。 综上所...
4. 功能调用:可以使用`<#function>`定义自定义函数,并在模板中调用。 5. 转义:`<@...>`用于调用Freemarker内置的函数或宏,例如`<@include>`用于包含其他模板。 三、Freemarker与Spring MVC集成 在Java Web开发...
5. **函数调用**: Freemarker支持自定义函数,通过`<#function>`定义,`<@function arg1 arg2>`调用。 **三、创建Freemarker示例** 1. **创建模板文件**: 创建一个名为`hello.ftl`的文件,内容如下: ``` <!...
- 可以通过自定义指令扩展Freemarker功能。 - 结合持续集成/部署(CI/CD)流程,自动批量生成大量静态页面。 通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能...
此外,FreeMarker提供了一些高级特性,比如条件语句(`<#if>`)、循环(`<#list>`)、函数调用等,可以帮助你创建复杂的模板逻辑。同时,Struts框架也有许多扩展点,如拦截器、自定义结果类型等,可以增强应用的功能...
Freemarker支持条件语句(`<#if>`、`<#else>`)、循环(`<#foreach>`)以及自定义函数(`<#function>`),使得模板可以处理更复杂的情况。 在实际应用中,我们通常会将这些步骤封装到一个服务类或工具类中,以便在...
4. **模板配置**:讲解如何配置FreeMarker,例如设置默认编码、定义自定义函数库等。 5. **高级特性**:涵盖如条件表达式、模板继承、国际化支持等进阶主题。 **Struts2与FreeMarker的整合** Struts2框架允许开发者...
`<#assign>`用于定义变量,`<#function>`则允许自定义函数。 2. **数据模型**:在Freemarker中,数据模型是从应用程序传递到模板的数据结构。它可以是Java对象、集合、Map等。模板通过表达式访问这些数据,如`${...
实际上,Freemarker支持更复杂的逻辑控制、循环结构、条件判断、自定义函数等特性,使得你可以构建出功能丰富的动态网页。在实际开发中,通常会结合Servlet或Spring MVC等Web框架,将Freemarker与后台业务逻辑和...
- 灵活:支持多种数据类型和复杂逻辑,可自定义指令和函数。 - 国际化:内置对多语言支持,方便实现国际化。 4. 使用步骤: - 引入依赖:在项目中添加Freemarker的Maven或Gradle依赖。 - 配置:设置Freemarker...
最后,FreeMarker的手册还包含了丰富的参考文档,其中包括内建函数的详细说明,这些函数包括用于字符串、数字、日期、布尔值、序列、哈希表和XML节点的内建函数。此外,指令参考文档部分详细描述了各种指令的用途和...
2.1 通过例子来学习:通过具体示例,学习如何在FreeMarker模板中处理XML。 2.2 形式化描述:对如何处理XML给出了形式化的定义。 三、声明的XML处理 3.1 基础内容:讲述了如何在FreeMarker中进行声明式的XML处理。 ...
6. **函数和宏**: Freemarker支持自定义函数和宏,可以封装复杂的逻辑。 在实际项目中,我们通常会创建一个标准的Freemarker布局,比如头部、主体和尾部,然后在每个Action对应的模板中,通过`<#include>`包含这些...
7. **案例研究**:手册可能包含实际项目中使用FreeMarker的例子,帮助读者更好地理解和应用学到的知识。 8. **API参考**:详细列出FreeMarker提供的所有内置指令和函数,方便开发者查阅。 9. **常见问题解答(FAQ...
在这个例子中,`<#list>`是一个FTL指令,用于遍历`animals`列表并输出每个动物的名称和价格。`${user}`和`${animal.name}`,`${animal.price}`则是插值,将被数据模型中的相应值替换。 总的来说,FreeMarker通过...
XML处理指南部分详细介绍了如何在FreeMarker中处理XML文档,包括如何将XML文档纳入数据模型、如何通过例子来学习和形式化描述XML文档的处理。FreeMarker还支持声明式的XML处理,这为复杂的XML转换提供了便捷的途径。...
- **内建函数参考文档**:列出了 FreeMarker 提供的内建函数及其用法。 - **指令参考文档**:提供了所有指令的详细介绍,包括语法和示例。 通过以上知识点的概览,读者可以全面了解 FreeMarker 的基本概念、使用...