2018-03-08 11:09
当然可以,just do it
有人这么来玩过:
public class AppConfig extends JFinalConfig {
Engine engine;
public configEngine(Engine me) {
me.setDevMode(true);
engine = me;
}
public void afterJFinalStart() {
engine.addSharedObject("Db", Db.use());
}
// 其它 configXxx() 方法省略
}
然后模板中这样来用:
#for( x : Db.find("select * from article limit 10"))
#(x.title)
#end
总之,记住 enjoy 的表达式是与 Java 直接打通的,就掌握了 enjoy 的 90% 的用法
2018-03-08 10:45
同一个 Model 是无法 “分别” 或者叫 “同时” 映射给两个不同数据源的,因为这样做没有意义,而且会出问题
因为 Model 中所有 api 去找数据源的时候,都是通过 getClass() 拿到自己是什么 class,然后将这个 class 当成 key 去 Map 中找数据源,而 Model.class 是全局唯一的,必然也只能对应一个数据源
如果希望 model 切换数据源,只能是临时来切换,像这样:
model.use(config).find(...);
上面说了这么多,其实你只要问你自己下面一个问题就可以了:
假定有下面的配置:
arp1.addMapping("config", "id", Config.class);
arp2.addMapping("sys_config", "id", Config.class);
那么 new Config().findById(123); 这行代码到底是去 "config" 还是去 "sys_config" 数据源去查询? 所以我前面说的同一个 Model 映射到多个数据源没有意义
2018-03-07 20:02
@可乐加冰 你还可以通过扩展 RenderFactory, 接管里头的 getRender 方法,完全控制 view 这个变量的规则
2018-03-07 16:28
@可乐加冰 在拦截器中很容易拿啊:
inv.invoke();
Render render = inv.getController().getRender();
if (render instanceof TemplateRender) {
...
} else {
...
}
Render 对象中还有直接操作 view 的方法,极度容易
2018-03-07 14:13
@HeathClieff 注意看文档的第三小节: http://www.jfinal.com/doc/5-13
加餐:有些同学希望在 sql 文件中获取getSqlPara(String, Object… paras) 方法传入的paras参数,可以通过表达式 _PARA_ARRAY_[index] 来获取到下标为index的参数值
具体到你的应用:
if(null == _PARA_ARRAY_[index])