2021-03-11 12:02
@永字诀 具体到你的应用,改成下面这样的为好:
engine.addSharedObject("Site", new SiteInfo());
用的时候这样:
#(Site.url)
siteUrl 属性名改为 url 为好,因为有了 Site. 前缀,siteUrl 是一种重复
2021-03-11 00:28
获取变量是在 Scope 的 get(Object key) 方法中,优先级是 Scope 内的 Map data 高于 shared object,源码在这里:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/template/stat/Scope.java
在 get(Object key) 中设置一个断点,调试一下可以了解更深入
目前在页面直接优先获取 shared object 貌似还没有好办法,不过,你可以通过扩展指令来实现,大致如下:
public class SharedObjectDirective extends Directive {
public void exec(Env env, Scope scope, Writer writer) {
String key = exprList.getExpr(0).toString();
Object value = scope.getSharedObject(key);
write(writer, value.toString());
}
}
最后配置一下:
engine.addDriective("so", SharedObjectDirective.class);
用的时候这样:
#so(site.siteUrl)
2021-03-09 14:25
@杜福忠 同学原因分析得应该挺对,但解决办法可以更简单点,我给一个更省事的办法,步骤如下:
1:在 YourJFinalConfig 中添加一个 onStart() 方法,在这个方法中手动启动 DruidPlugin 与 ActiveRecordPlugin
2:用一个 for 循环加一个try catch 处理一下,代码大致如下:
public onStart() {
DruidPlugin dp = new ...;
ActiveRecordPlugin arp = new ...;
for ( int i = 0 ; i < 10; i++ ) {
try {
dp.start();
arp.start();
} catch ( Exception e) {
Thread.sleep(3000); // 线程睡 3 秒
continue ;
}
}
}