2017-06-23 17:18

@i++ 刚添加了一个 Engine.getTemplateCacheSize() 方法,可以去 github.com/jfinal/jfinal 下载最新版本的 jfinal 获取代码,记得用上以后反馈给我

2017-06-23 17:11

还有一个办法是对 getTemplateByString 添加一个 key 参数,让这个 key 值是固定不变的:
engine.getTempateByString("myTemplate", content);

还需要考虑很多,现在的情况下,对于 String Template 的使用可以暂时自己写点代码扩展

2017-06-23 17:09

@i++ 你的建议我会综合考虑,是一个改进的思维方向,但还要考虑更多因素,例如文件型的模板,即便改名称,也一定非常有限,大部分情况下是去改文件型模板中的内容

场景很重要,这个问题主要集中在 String 型的 Template 处理,还有很多思路可以考虑,例如,改进 MemoryStringSource,让其自身可以维护 cache都是可以考虑的方向

2017-06-23 17:06

@i++ 你可以通过扩展 Engine 的方式来解决:
public class MyEngine extends engine {
public Template getTemplateByString(String content) {
// 在这里用一个 Map 存放你所有的 key 值
// 然后用一个独立的定时器定时清理一下就可以了
// 清理的时候可以简单性的 remove掉所有 cache,这个不耗什么性能
}
}

随后可以调用 Engine.setMainEngine(new MyEngine()); 的方式替换掉 jfinal 的主 Engine 对象

最后你就可以在任何地方通过 Engine.use() 来获取到你自己的 MyEngine 对象了,当然你也可以自行管理你的 MyEngine 对象

2017-06-23 16:59

只要是通过 setAttr(...) 过来的值,一定可以用 #() 取,注意一下,你的 js 必须要在 html 中去写,而不是写在另外的 js 文件之中,因为 jfinal template engine 是渲染了你的 edit.html,并不会去渲染你的独立的 js 文件

2017-06-23 11:38

创建 template 时的线程安全问题不需要处理,Template 对象并不需要做成单例,如果出现多线程并发同时创建“同一个key" 值的 Template,让后一个创建的线程,在 templateCache.put(key, template) 时覆盖掉前面的就可以了

如果让 templateCache 使用 ConcurrentHashMap 或者使用 synchronized 进行同步,会拉低性能

关键在于 Template 对象大并发情况下,多个线程 parse 出多个“相同 key" 的 Template 无关紧要,在那一时刻多消耗点时空而已

2017-06-23 11:30

@i++ jfinal 3.1 版本改进了这个地方,升级到了 jfinal 3.1 没?

2017-06-23 11:26

jfinal 将此建议纳入到改进列表,看有没有好的办法解决 String template 的缓存问题,目前能想到的是对 String 型 Template 不做缓存,因为 jfinal template engine 是自己手写的解析器,解析模板的性能比 freemaker、velocity 快五倍,这个解析的时空消耗在大多数应用场景下可以忽略

2017-06-23 11:23

这确实是个非常好的建议,对于 String 型的 Template 来说,当内容发生变化时,key 值也发生了变化,所以也就找不到原来那个 key 值,无法删除 String 型的 Template 的缓存

目前需要开发者手动 remove 一下 cache,可以采用如下的方式:
1:web 项目之下:RenderManager.me().getEngine().removeTemplateCache(key)
2:非 web 项目,Engine.use(...).removeTemplateCache(key)

2017-06-23 11:08

ClassNotFoundException 这个是最基本的异常,缺少 jar 包而已,如果 jar 包确实存在有可能是版本不对或者类路径不对

2017-06-23 11:06

在 MetaBuilder 中设置断点,里面有一个生成 table 的 Meta 信息的处理,看那个处理对前缀的处理出了什么问题

2017-06-22 23:24

LDConfig 完全可以改造成为 LucenePlugin,然后里面添加一点 setter 方法进行配置,然后再 me.add(lucenePlugin) 即可打完收工了

2017-06-22 23:23

建议做一个 jfinal 的 lucene 插件出来,然后发布到 maven 中心库,我再添加这个插件到 jfinal club 项目中去

2017-06-22 23:22

感觉越来越简单了,啥时候帮 jfinal club 项目添加个 lucene 模块? 然后我在 jfinal.com 社区也添加上这个模块