2017-04-05 20:16
@goodjfinalx @quiet_cai 解决办法极其简单,扩展出一个 Eval 指令出来,大致这样:
public class Eval extends Directive {
public void exec(Env env, Scope scope, Writer) {
String content = exrpList.eval(scope);
String result = Engine.use().getTemplateByString(content).renderToString(new HashMap());
write(wirter, result);
}
}
做好以后添加: me.addDirective("eval", new Eval());
用的时候这样:#eval(article.content)
jfinal 3.0 在发布前曾想做这样一个指令,但由于担心 eval 会被人误用带来一定的安全隐患,这个功能暂且留给开发者自己去扩展着玩
如果要做得更好,可以创建 Parser 对内容进行解析得到 ast 以后执行,连 Engine.use() 都不再需要了
2017-04-05 17:32
@quiet_cai 道理很简单,将这种用法用在 jsp、freemarker、velocity 等等任意的一款模板都是一样的结果,例如在数据库中存放一个 ${value} 数据,然后在 jsp 中使用一样会原样输出,不会被解析
2017-04-05 17:30
@quiet_cai 你的数据内容存放在了数据库中,而这部分内容并不是模板的一部分,只是模板中的一个变量而已,自然就不会被解析了
2017-04-04 15:23
@tobecontinue KlassSeoInter 是用于专用目的的,你可以不需要这个东东,这个功能在做起来的时候,仅仅是用拦截器去生成 sql,多动手调试一下就可以解决