2017-03-22 15:20

@cleverbug 如果有新旧项目对接整合,建立保持原有的 bean 不要去动,然后利用 jfinal generator 单独生成 model 层,最后做个工具类,让老的 bean 与 model 之间可以互相转换,互相协同

2017-03-22 14:53

很明显是配置有问题,你连配置都没给出来,谁能猜中是什么错误?

2017-03-22 14:46

@cleverbug 原来你的 bean 中还有别的属性,通过引入中间 MyModel 覆盖掉 set put ,在其中使用反射可以实现

建议去掉 bean 中的属性,全部使用父类的 Model 来存放值,而且生成器也帮助生成了 setter getter 方法,外界使用 bean 的地方都是通过 getter setter 来操作的

2017-03-22 13:11

必然可行,很多小伙伴们已经在这么玩了,但玩法比你的更简单,只需要先创建一个自己的 MyModel extends Model,然后设置一下生成器的参数即可,让 BaseModel 由原来的继承 Model 改为继承你的 MyModel 即可,形成的继承结构是:
FinalModel extends BaseFinalModel extends MyModel extends Model

我这里默认了:你是知道 jfinal 的 model generator 的

2017-03-22 13:08

这个是 web 规范造成的,与 jfinal 无关,只需要在资源路径前添加一个 "/" 即可,例如:
href="/assets/plugins/bootstra/css/bootstrap.min.css"

2017-03-22 13:07

这个贴子貌似是分享类型,为啥放到了反馈频道呢?

2017-03-22 13:06

此外,session 中的值可以直接在页面使用,不必用 setAttr 来传递,只需要添加一个拦截器:
me.add(new SessionInViewInterceptor());
然后可在页面中这样来取值:
#(session.obj.field)

2017-03-22 12:30

一直都可以,这样来用:
inv.getController().setAttr(...);

此外,render 也不在话下:
inv.getController().render(...);

2017-03-22 12:26

@cleverbug 先直接改源码试用下,然后反馈给我是不是好用,后续版本会考虑改进这里,要改进只需要在 init 上添加一个 protected 即可

2017-03-22 12:24

1:代码大致是可以的,但不够简洁,例如第七行的 find 可以改为 findFirst。更好的方案后面说
2:如果动态创建 ActiveRecordPlugin 与其依赖的 DuirdPlugin,那么都需要动态回收资源,需要调用 ActiveRecordPlugin 以及 DruidPlugin 的 stop() 方法

创建数据库连接池会有一定的延迟,所以通常是系统初始化的时候创建,下面给出新的方案:
1:在系统启动的时候,读出所有客户有关数据库的信息,一次性统一创建好 ActiveRecordPlugin
2:如果后期有新客户加入,那么在加入的同时就创建好 ActiveRecordPlugin
3:为了避免多个 ActiveRecordPlugin 在启动时就耗尽数据库允许的最大连接数,所以要需要控制 DruidPlugin 的初始连接个数
4:创建一个名为 ConfigNameInterceptor 的全局拦截器,里面放一个 ThreadLocal属性来存放当前请求客户的 configName,通过查询主数据库设定好合适的 configName
5:用户请求某个业务时,业务从 ConfigNameInterceptor 的 ThreadLocal 中获取 configName
6:代码中统一: Db.use(configName).find(...) ,这样就实现了业务层对所有客户都是完全一样代码的目标

2017-03-22 12:11

添加一个全局拦截器: me.add(new SessionInViewInterceptor()),然后在页面这样获取数据:
#(session.obj.field)

2017-03-22 12:10

@zhongshg 还好我的回复比较详细,要不然只发现部分原因,仍然无法解决,多多支持社区发展

2017-03-22 12:06

添加 ContextHandler("ctx") 以后,在页面中直接 #(ctx) 就可以获取了

2017-03-21 22:01

这些代码是演示如何手动去切换 locale,也可以不用手动做这事,jfinal 有一套自动化的策略,只需要提供好相应的 properties 文件就可以了

2017-03-21 21:56

我刚测试了一下,是绝对可以的,你在本地测试一下下面的代码:

import com.jfinal.plugin.cron4j.Cron4jPlugin;
import com.jfinal.plugin.cron4j.ITask;

public class Test {

public static void main(String[] args) {
new Cron4jPlugin().addTask("* * * * *", new ITask() {
public void run() {
System.out.println("运行");
}

public void stop() {
System.out.println("停止");
}
}).start();

try {
System.out.println("主线程睡眠");
Thread.currentThread().sleep(99999999);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}