6.2 引擎配置
1、基本配置
如果在web环境下使用,可以通过JFinalConfig中的configEngine(Engine me)抽象方法对其进行配置,如下是代码示例:
- public void configEngine(Engine me) {
- // devMode 配置为 true,将支持模板实时热加载
- me.setDevMode(true);
- }
以上第二行代码将engine设置为 devMode 模式,在该模式下**模板文件的修改会及时生效**,相当于热加载功能,这在开发环境下是提升开发效率必须的配置。
2、共享模板函数配置
如果模板中通过 #define 指令定义了 template function,并且希望这些 template function 可以在其它模板中直接调用的话,可以进行如下配置:
- // 添加共享函数,随后可在任意地方调用这些共享函数
- me.addSharedFunction("/view/common/layout.html");
以上代码添加了一个共享函数模板文件 layout.html,这个文件中使用了#define指令定义了template function。通过上面的配置,可以在任意地方直接调用 layout.html 里头的 template function。
3、从 class path 和 jar 包加载模板配置
如果模板文件在项目的 class path 路径或者 jar 包之内,可以通过**me.setSourceFactory(new ClassPathSourceFactory()) **以及 me.setBaseTemplatePath(**null**) 来实现,以下是代码示例:
- public void configEngine(Engine me) {
- me.setDevMode(true);
- me.setBaseTemplatePath(null);
- me.setSourceFactory(new ClassPathSourceFactory());
- me.addSharedFunction("/view/common/layout.html");
- }
通过上面的 me.setSourceFactory(...) 可以推测出来,还可以通过实现ISourceFactory、ISource 扩展出从任何地方加载模板文件的功能,目前已有用户实现 DbSource 来从数据库加载模板的功能。
4、sql 管理模块的 Engine 配置
JFinal Template Engine 被设计成为可以在单独的项目中同时使用多个 Engine 对象,这多个不同的 Engine 对象可分别进行不同的配置,用于不同的用途,独立配置、互不干扰。
例如,jfinal 中的 configEngine(Engine me) 中配置的 Engine 对象是用于 Controller.render(...) 方法的渲染,而 ActiveRecordPlugin.getEngine() 对象是用于 sql 管理功能模块,这两个 Engine 对象是两个不同的实例,互相之间没有干扰,配置方式也不同。
前面例子中的配置已介绍过了用于 Controller.render(...) 渲染的 Engine 对象的配置,而 ActiveRecordPlugin 的 sql 管理模块的 Engine 对象的配置方法如下:
- public void configPlugin(Plugins me) {
- ActiveRecordPlugin arp = new ActiveRecordPlugin(...);
- Engine engine = arp.getEngine();
- // 上面的代码获取到了用于 sql 管理功能的 Engine 对象,接着就可以开始配置了
- engine.setSourceFactory(new ClassPathSourceFactory());
- engine.addSharedMethod(new StrKit());
- me.add(arp);
- }
上面代码中通过 arp.getEngine() 获取到了 sql 管理模块专用的 Engine 对象,并对其进行了两项配置。这两项配置仅对 sql 管理功能的 Engine 对象有效,与 configEngine(Engine me) 中配置的 Engine 对象完全无关,她们自各拥有独立的配置。
5、Eclipse 下开发
在 Eclipse 下开发时,可以将 Validation 配置中的 Html Syntax Validator 中的自动验证去除勾选,因为 eclipse 无法识别 JFinal Template Engine 使用的指令,从而会在指令下方显示黄色波浪线,影响美观。后续会提供相关插件给予支持,具体的配置方式见下图:
这个操作不影响使用,仅为了代码美观,关爱处女座完美主义者。