使用FreeMarker将数据模型中的值合并到模板文件中

 

步骤如下:

①创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例。

②使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。

③填充数据模型,数据模型就是一个Map对象。

④调用Template实例的process方法完成合并。

 

根据上面步骤,下面提供一个使用FreeMarker创建输出的Java程序,该程序代码如下:

public class HelloFreeMarker

{

    //负责管理FreeMarker模板文件的Configuration实例

    private Configuration cfg;

    //负责初始化Configuration实例的方法

    public void init() throws Exception

    {

        //初始化FreeMarker配置

        //创建一个Configuration实例

        cfg = new Configuration();

        //设置FreeMarker的模板文件位置

        cfg.setDirectoryForTemplateLoading(new File("templates"));

    }

    //处理合并的方法

    public void process() throws Exception

    {

        //创建数据模型

        Map root = new HashMap();

        root.put("name", "FreeMarker!");

        root.put("msg", "您已经完成了第一个FreeMarker的实例!");

        //使用Configuration实例来加载指定模板

        Template t = cfg.getTemplate("test.flt");

        //处理合并

        t.process(root, new OutputStreamWriter(System.out));

    }

    public static void main(String[] args) throws Exception

    {

        HelloFreeMarker hf = new HelloFreeMarker();

        hf.init();

        hf.process();

    }

}

上面代码创建了一个Map实例root,这个root将作为模板文件的数据模型,在该数据模型中存储了两个

key-value对,其中第一个是name,第二个是msg,这两个key都有对应的value,这两个value将会填充到模板中对应的插值处。

虽然FreeMarker可以在Java中使用,但大部分时候FreeMarker都用于生成HTML页面。

 

 servlet合并模板和数据模型:

下面介绍在Web应用中使用FreeMarker,用Servlet来合并模板和数据模型,下面是Servlet应用中的代码:

public class HelloServlet extends HttpServlet

{

    //负责管理FreeMarker模板文件的Configuration实例

    private Configuration cfg;

    //负责初始化Configuration实例的方法

    public void init() throws Exception

    {

        //初始化FreeMarker配置

        //创建一个Configuration实例

        cfg = new Configuration();

        //设置FreeMarker的模板文件位置

        cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");

    }

    //生成用户响应

    public void service(HttpServletRequest request, HttpServletResponse response) throws

    ServletException, IOException

    {

        //创建数据模型

        Map root = new HashMap();

        root.put("message", "Hello FreeMarker!");

        //使用Configuration实例来加载指定模板,即:取得模板文件

        Template t = cfg.getTemplate("test.flt");

        //开始准备生成输出

        //使用模板文件的charset作为本页面的charset

        //使用text/html,MIME-type

        response.setContentType("text/html; charset=" + t.getEncoding());

        Writer out = response.getWriter();

        //合并数据模型和模板,并将结果输出到out中

        try

        {

            t.process(root, out);

        }

        catch(TemplateException e)

        {

            throw new ServletException("处理Template模板中出现的错误", e);

        }

    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从官网下载来的,应该是最权威的教程了. 目录 FreeMarker 手册 .......................................................................................................... 1 用于 FreeMarker 2.3.18 ........................................................................................... 1 目录................................................................................................................................ 2 前言................................................................................................................................ 7 什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .......................................................................................... 7 文档规约................................................................................................................... 8 联系我们................................................................................................................... 8 几点说明................................................................................................................... 8 第一部分 模板开发指南 ................................................................................................... 9 第一章 模板开发入门 ............................................................................................... 9 1.1 简介 ............................................................................................................ 9 1.2 模板 + 数据模型 = 输出 ............................................................................. 9 1.3 数据模型一览 ............................................................................................ 10 1.4 模板一览 ................................................................................................... 13 第二章 数和类型 ................................................................................................. 19 2.1 基本内容 ................................................................................................... 19 2.2 类型 .......................................................................................................... 21 第三章 模板 ........................................................................................................... 25 3.1 总体结构 ................................................................................................... 25 3.2 指令 .......................................................................................................... 26 3.3 表达式 ....................................................................................................... 27 3.4 插 .......................................................................................................... 42 第四章 其它 ........................................................................................................... 45 4.1 自定义指令 ................................................................................................ 45 4.2 在模板定义变量 ..................................................................................... 50 4.3 命名空间 ................................................................................................... 53 4.4 空白处理 ................................................................................................... 56 4.5 替换(方括号)语法 ................................................................................... 59 第二部分 程序开发指南 ................................................................................................. 61 第一章 程序开发入门 ............................................................................................. 61 1.1 创建配置实例 ............................................................................................ 61 1.2 创建数据模型 ............................................................................................ 61 1.3 获得模板 ................................................................................................... 62 1.4 合并模板数据模型 .................................................................................. 63 1.5 将代码放在一起 .......................................................................................... 63 第二章 数据模型 .................................................................................................... 65 2.1 基本内容 ................................................................................................... 65 2.2 标量 .......................................................................................................... 65 2.3 容器 .......................................................................................................... 66 2.4 方法 .......................................................................................................... 67 2.5 指令 .......................................................................................................... 68 2.6 节点变量 ................................................................................................... 74 2.7 对象包装 ................................................................................................... 75 第三章 配置 ........................................................................................................... 79 3.1 基本内容 ................................................................................................... 79 3.2 共享变量 ................................................................................................... 79 3.3 配置信息 ................................................................................................... 80 3.4 模板加载 ................................................................................................... 82 3.5 错误控制 ................................................................................................... 85 第四章 其它 ........................................................................................................... 89 4.1 变量 .......................................................................................................... 89 4.2 字符集问题 ................................................................................................ 89 4.3 多线程 ....................................................................................................... 91 4.4 Bean 的包装 ................................................................................................ 91 4.5 日志 .......................................................................................................... 97 4.6 在Servlet 使用FreeMarker ...................................................................... 98 4.7 为FreeMarker 配置安全策略......................................................................105 4.8 遗留的XML 包装实现 ................................................................................106 4.9 和Ant 一起使用FreeMarker.......................................................................109 4.10 Jython 包装器 ..........................................................................................110 第三部分 XML 处理指南................................................................................................112 前言.......................................................................................................................112 第一章 揭示XML 文档 ...........................................................................................113 1.1 节点树 ......................................................................................................113 1.2 将XML 放到数据模型 ............................................................................115 第二章 必要的XML 处理 ........................................................................................117 2.1 通过例子来学习 ........................................................................................117 2.2 形式化描述 ...............................................................................................124 第三章 声明的XML 处理 ........................................................................................129 3.1 基础内容 ..................................................................................................129 3.2 详细内容 ..................................................................................................131 第四部分 参考文档 .......................................................................................................134 第一章 内建函数参考文档 .....................................................................................134 1.1 处理字符串的内建函数 .............................................................................134 1.2 处理数字的内建函数 .................................................................................147 1.3 处理日期的内建函数 .................................................................................151 1.4 处理布尔的内建函数 .............................................................................155 1.5 处理序列的内建函数 .................................................................................156 1.6 处理哈希表的内建函数 .............................................................................161 1.7 处理节点(XML)的内建函数....................................................................162 1.8 很少使用的和专家级的内建函数 ...............................................................163 第二章 指令参考文档 ............................................................................................167 2.1 if,else,elseif 指令 ...................................................................................167 2.2 switch,case,default,break 指令..............................................................169 2.3 list,break 指令 .........................................................................................170 2.4 include 指令 ...............................................................................................171 2.5 import 指令 ...............................................................................................174 2.6 noparse 指令 ..............................................................................................175 2.7 compress 指令 ............................................................................................176 2.8 escape,noescape 指令...............................................................................177 2.9 assign 指令 ................................................................................................179 2.10 global 指令 ..............................................................................................181 2.11 local 指令 ................................................................................................182 2.12 setting 指令 .............................................................................................182 2.13 用户自定义指令(<@...>) ......................................................................184 2.14 macro,nested,return 指令 ....................................................................186 2.15 function,return 指令...............................................................................190 2.16 flush 指令 ................................................................................................192 2.17 stop 指令.................................................................................................192 2.18 ftl 指令 ....................................................................................................193 2.19 t,lt,rt 指令 ..........................................................................................194 2.20 nt 指令 ....................................................................................................195 2.21 attempt,recover 指令 .............................................................................196 2.22 visit,recurse,fallback 指令 .....................................................................197 第三章 特殊变量参考文档 .....................................................................................202 第四章 FTL 的保留名称.......................................................................................204 第五章 废弃的FTL 结构 .........................................................................................205 5.1 废弃的指令列表 ........................................................................................205 5.2 废弃的内建函数列表 .................................................................................205 5.3 老式的macro 和call 指令 ..........................................................................205 5.4 转换指令 ..................................................................................................207 5.5 老式FTL 语法 ............................................................................................208 5.6 #{…}式的数字插 ......................................................................................209 第五部分 附录 ..............................................................................................................211 附录A FAQ .............................................................................................................211
Freemarker模板文件的扩展名通常为`.ftl`,而不是`.tpl`。你可以创建一个以`.ftl`为扩展名的文件,并使用Freemarker模板语法编写动态内容。 以下是一个简单的FreeMarker模板示例: ```freemarker <html> <head> <title>Welcome to FreeMarker!</title> </head> <body> <h1>Welcome ${user}!</h1> <p>Here are your orders:</p> <ul> <#list orders as order> <li>${order}</li> </#list> </ul> </body> </html> ``` 在上面的模板,`${user}`和`${order}`是Freemarker的变量插语法,它们会被实际的替换。`<#list>`语句用于遍历`orders`列表并生成相应的HTML代码。 你可以将上述模板保存在一个以`.ftl`为扩展名的文件,例如`welcome.ftl`。 在使用Freemarker时,你需要创建一个`Configuration`对象,并将其配置为加载模板文件的位置。然后,使用`Template`对象加载模板,并将数据模型传递给它。最后,使用`Template.process()`方法将数据模型模板合并,生成最终的输出。 以下是一个简单的Java示例: ```java Configuration cfg = new Configuration(Configuration.VERSION_2_3_31); cfg.setClassForTemplateLoading(this.getClass(), "/templates"); Template template = cfg.getTemplate("welcome.ftl"); Map<String, Object> data = new HashMap<>(); data.put("user", "John"); data.put("orders", Arrays.asList("Order 1", "Order 2", "Order 3")); Writer out = new StringWriter(); template.process(data, out); String output = out.toString(); ``` 在上面的示例,我们将模板文件放在`/templates`目录下,并使用`cfg.setClassForTemplateLoading()`方法设置模板加载的位置。然后,我们创建一个包含用户和订单数据的`Map`对象,并将其传递给`template.process()`方法。最后,我们将生成的输出保存在一个字符串。 希望这个示例能帮助你理解Freemarker模板的基本用法。请记住,Freemarker有更多的语法和功能,你可以参考官方文档以了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值