onStart()进启动时执行一次 数据库变化了没法跟着变

public void onStart() {
Siteinfo siteinfo = Siteinfo.dao.findFirst("select * from siteinfo");
RenderManager.me().getEngine().addSharedObject("siteinfo", siteinfo);
}

在onStart里面读取数据库后给模板传送全局参数作为网站信息,但是后台修改过网站信息数据库后,前台不变,原因时onStart仅环境启动时执行一次。


请问这样的问题怎么破?有没有其他方法?

评论区

杜福忠

2020-03-31 21:35

把Siteinfo siteinfo对象找个位置用静态变量存起来,然后, 后台修改操作的位置加上一行代码 siteinfo._setAttrs(数据库写入的那个对象),这样进行一个更新操作就OK了

JFinal

2020-04-01 17:23

@杜福忠 这个方法可以的

还有一个办法是:
engine.removeSharedObject("siteinfo");
engine.addSharedObject("siteinfo", Siteinfo.dao.findFirst("select * from siteinfo");

较新的 jfinal 版本添加了 Engine.removeSharedObject 方法,便于动态调整共享变量

苦丁香

2020-04-02 21:31

@JFinal 但是在onStart()方法里removeSharedObject也是环境启动的时候才会清理吧,或者addSharedObject不写在onStart里面?
我目前用的拦截器set的变量,但感觉效率可能会打折扣。

JFinal

2020-04-02 21:54

@苦丁香 具体什么时候 removeSharedObject ,得看你什么时候需要,不要限定在 onStart 这个地方

思路再放宽些

热门反馈

扫码入社