6.11 任意环境下使用Engine

  1. JFinal Template Engine的使用不限于web,可以使用在任何java开发环境中,使用方式极为简单。

1、基本用法

  1. 直接举例:
  1. Engine.use().getTemplate("demo.html").renderToString(Kv.by("k", "v"));
  1. 一行代码搞定模板引擎在任意环境下的使用,将极简贯彻到底。上例中的use()方法将从Engine中获取默认存在的main Engine对象,然后通过getTemplate获取Template对象,最后再使用renderToString将模板渲染到String之中。

2、进阶用法

  1. 直接举例:
  1. Engine engine = Engine.create("myEngine");
  2. engine.setDevMode(true);
  3. engine.setSourceFactory(new ClassPathSourceFactory());
  4. Template template = engine.getTemplate("wxAppMsg.txt");
  5. String wxAppMsg = template.renderToString(Kv.by("toUser", "james"));
  6.  
  7. engine = Engine.use("myEngine");
  1. 上例第一行代码创建了名为 "myEngine" Engine对象,第二行代码设置了热加载模板文件,第三行代码设置引擎从 class path 以及 jar 包中加载模板文件,第四行代码利用wxAppMsg.txt这个模板创建一个Template对象,第五行代码使用该对象渲染内容到String对象中,从而生成了微信小程序消息内容。
  2. 注意,最后一行代码使用use方法获取到了第一行代码创建的engine对象,意味着使用正确的engineName可以在任何地方获取到之前创建的engine对象,极为方便。
  3. 除了可以将模板渲染到String中以外,还可以渲染到任意的Writer之中,只需要用一下Template.render(Map data, java.io.Writer wirter)方法即可实现,例如:Writer接口如果指向文件,那么就将其内容渲染到文件之中,甚至可以实现Writer接口将内容渲染到socket套接字中。
  4. 除了外部模板文件可以作为模板内容的来源以外,还可以通过String数据或者IStringSource接口实现类作为模板数据的来源,以下是代码示例:
  1. Template template = engine.getTemplateByString("#(x + 123)");
  2. String result = template.renderToString(Kv.by("x", 456));
  3.  
  4. template = engine.getTemplate(new MySource());
  5. result = template.renderToString(Kv.by("k", "v"));

上例代码第一行通过getTemplateByString来获取Template对象,而非从外部模板文件来获取,这种用法非常适合模板内容非常简短的情况,避免了创建外部模板文件,例如:非常适合用于替换JDK中的String.format(…)方法。

上例中的第三行代码,传入的参数是new MySource(),MySource类是ISource接口的实现类,通过该接口可以实现通过任意方式来获取模板内容,例如,通过网络socket连接来获取,ISource接口用法极其简单,在此不再赘述。

3、Engine对象管理

  1. Engine对象的创建方式有两种,一种是通过Engine.create(name)方法,另一种是直接使用new Engine()语句,前者创建的对象是在Engine模块管辖之内,可以通过Engine.use(name)获取到,而后者创建的对象脱离了Engine模块管辖,无法通过Engine.use(name)获取到,开发者需要自行管理。
  2. JFinalrender模块以及activerecord模块使用new Engine()创建实例,无法通过Engine.use(name)获取到,前者可以通过**RenderManager.me().getEngine()**获取到,后者可以通过**activeRecordPlugin.getEngine()**或者**DbKit.getConfig().getSqlKit().getEngine()**获取到。
  3. Engine对象管理的设计,允许在同一个应用程序中使用多个Engine实例用于不同的用途,JFinal自身的renderactiverecordEngine的使用就是典型的例子。这个设计还使开发者不仅可以利用官方提供的createuse方法来创建和使用Engine对象,而且还可以通过new Engine()的方式来创建自由、游离的对象自行去管理,有利于实现更为独立的模块功能。
  4. **强烈建议加入 JFinal 俱乐部**,获取极为全面的 jfinal 最佳实践项目源代码 jfinal-club,项目中包含大量的**模板引擎使用实例**,可以用最快的速度,几乎零成本的轻松方式,掌握 JFinal Template Engine最简洁的用法,省去看文档的时间:[**http://www.jfinal.com/club**](http://www.jfinal.com/club)

< 6.10 Spring整合

7.1 概述 >

原文: http://www.jfinal.com/doc/6-11