`

freemarker自定义函数例子

 
阅读更多

例子,实现求字符串的长度。

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));
&nbsp;&nbsp;	}
}

 模板文件demo01.ftl如下:

${length("取字符串长度")}

 

分享到:
评论

相关推荐

    freemarker学习例子

    10. **自定义标签(Custom Tags)**:如果需要集成其他框架(如Spring MVC)的标签,可以创建自定义标签,扩展Freemarker的功能。 在“freemarker学习例子”中,你可能看到如何设置数据模型、创建简单的模板、使用...

    freemarker内置函数

    本篇将深入讲解Freemarker的内置函数,结合实际例子,帮助你更好地理解和运用这些功能。 一、变量与表达式 在Freemarker中,变量的引用使用`${}`,例如 `${name}` 将输出变量name的值。表达式可以是简单的变量引用...

    一个意义深刻 FreeMarker 入门例子之HelloWord

    此外,FreeMarker还支持条件语句(`&lt;#if&gt;`、`&lt;#else&gt;`、`&lt;#else if&gt;`)、循环(`&lt;#list&gt;`)、函数调用(`&lt;@...&gt;`)等复杂逻辑,使得模板文件可以生成更丰富的输出。 为了运行这个例子,你需要: 1. 解压`FreeMarker...

    freeMarker例子

    这个例子可以作为基础,通过引入更多的FreeMarker特性,如条件语句、循环结构、自定义函数等,来增强模板的功能。同时,可以通过优化Servlet的性能,如使用缓存、异步处理等手段,提高整个应用的响应速度。 综上所...

    freemarker代码

    4. 功能调用:可以使用`&lt;#function&gt;`定义自定义函数,并在模板中调用。 5. 转义:`&lt;@...&gt;`用于调用Freemarker内置的函数或宏,例如`&lt;@include&gt;`用于包含其他模板。 三、Freemarker与Spring MVC集成 在Java Web开发...

    freemarker 例子

    5. **函数调用**: Freemarker支持自定义函数,通过`&lt;#function&gt;`定义,`&lt;@function arg1 arg2&gt;`调用。 **三、创建Freemarker示例** 1. **创建模板文件**: 创建一个名为`hello.ftl`的文件,内容如下: ``` &lt;!...

    freemarker生成静态HTML例子

    - 可以通过自定义指令扩展Freemarker功能。 - 结合持续集成/部署(CI/CD)流程,自动批量生成大量静态页面。 通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能...

    Java freemarker demo 【struts + freemarker】 自己修改的一个小例子

    此外,FreeMarker提供了一些高级特性,比如条件语句(`&lt;#if&gt;`)、循环(`&lt;#list&gt;`)、函数调用等,可以帮助你创建复杂的模板逻辑。同时,Struts框架也有许多扩展点,如拦截器、自定义结果类型等,可以增强应用的功能...

    freemarker解析成pdf

    Freemarker支持条件语句(`&lt;#if&gt;`、`&lt;#else&gt;`)、循环(`&lt;#foreach&gt;`)以及自定义函数(`&lt;#function&gt;`),使得模板可以处理更复杂的情况。 在实际应用中,我们通常会将这些步骤封装到一个服务类或工具类中,以便在...

    struts2和freemarker整合

    4. **模板配置**:讲解如何配置FreeMarker,例如设置默认编码、定义自定义函数库等。 5. **高级特性**:涵盖如条件表达式、模板继承、国际化支持等进阶主题。 **Struts2与FreeMarker的整合** Struts2框架允许开发者...

    freemarker 2.3.18 中文手册

    `&lt;#assign&gt;`用于定义变量,`&lt;#function&gt;`则允许自定义函数。 2. **数据模型**:在Freemarker中,数据模型是从应用程序传递到模板的数据结构。它可以是Java对象、集合、Map等。模板通过表达式访问这些数据,如`${...

    freemarker学习

    实际上,Freemarker支持更复杂的逻辑控制、循环结构、条件判断、自定义函数等特性,使得你可以构建出功能丰富的动态网页。在实际开发中,通常会结合Servlet或Spring MVC等Web框架,将Freemarker与后台业务逻辑和...

    适用jdk1.8的freemarker

    - 灵活:支持多种数据类型和复杂逻辑,可自定义指令和函数。 - 国际化:内置对多语言支持,方便实现国际化。 4. 使用步骤: - 引入依赖:在项目中添加Freemarker的Maven或Gradle依赖。 - 配置:设置Freemarker...

    FreeMarker_Manual_zh_CN.pdf

    最后,FreeMarker的手册还包含了丰富的参考文档,其中包括内建函数的详细说明,这些函数包括用于字符串、数字、日期、布尔值、序列、哈希表和XML节点的内建函数。此外,指令参考文档部分详细描述了各种指令的用途和...

    freemarker使用文档

    2.1 通过例子来学习:通过具体示例,学习如何在FreeMarker模板中处理XML。 2.2 形式化描述:对如何处理XML给出了形式化的定义。 三、声明的XML处理 3.1 基础内容:讲述了如何在FreeMarker中进行声明式的XML处理。 ...

    struts2&&freemarker

    6. **函数和宏**: Freemarker支持自定义函数和宏,可以封装复杂的逻辑。 在实际项目中,我们通常会创建一个标准的Freemarker布局,比如头部、主体和尾部,然后在每个Action对应的模板中,通过`&lt;#include&gt;`包含这些...

    FreeMarker_Manual_zh_CN.rar_freemarker

    7. **案例研究**:手册可能包含实际项目中使用FreeMarker的例子,帮助读者更好地理解和应用学到的知识。 8. **API参考**:详细列出FreeMarker提供的所有内置指令和函数,方便开发者查阅。 9. **常见问题解答(FAQ...

    freemarker语法知识

    在这个例子中,`&lt;#list&gt;`是一个FTL指令,用于遍历`animals`列表并输出每个动物的名称和价格。`${user}`和`${animal.name}`,`${animal.price}`则是插值,将被数据模型中的相应值替换。 总的来说,FreeMarker通过...

    FreeMarker中文帮助文档

    XML处理指南部分详细介绍了如何在FreeMarker中处理XML文档,包括如何将XML文档纳入数据模型、如何通过例子来学习和形式化描述XML文档的处理。FreeMarker还支持声明式的XML处理,这为复杂的XML转换提供了便捷的途径。...

    FreeMarker 中文教程 用于 FreeMarker 2.3.19

    - **内建函数参考文档**:列出了 FreeMarker 提供的内建函数及其用法。 - **指令参考文档**:提供了所有指令的详细介绍,包括语法和示例。 通过以上知识点的概览,读者可以全面了解 FreeMarker 的基本概念、使用...

Global site tag (gtag.js) - Google Analytics