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();
}
}
}

2017-03-21 21:51

使用拦截器支持事务时,不要将内部的异常吃掉,所以 try catch 中需要将异常再次抛出来,这个可能是在你的代码中没有支持事务的根本原因

此外,还要注意 mysql 只有 innodb 引擎才支持事务,myisam 天然不支持事务,还要注意事务级别是否匹配当前的数据库操作,如果是 jfinal 3.0 版本,默认级别比较高,一般不需要调整

最后,上面的代码中,既然 savePay 中已经使用了 @Before 声明了事务,那么在 enhance 时就不需要添加 Tx.class 这个参数了

最后的最后,个人一般建议直接使用 Db.tx(...) 的方式支持事务,控制起来更加方便,例如,可以 try catch,然后在 catch 中 return false 就可以控制事务回滚了,然后通过得到 Db.tx(...) 方法的返回值再控制对上层响应什么返回值会更方便

2017-03-21 16:34

@zhaozhihong sql 中最后的分号去掉没有,注意将 sql 彻底改造成 JDBC 支持的格式

2017-03-21 15:12

用一下 renderFile(new File("D:/download/myFile.zip")) 这种形式,可以指定任意路径下的文件,这个在 jfinal 手册中应该有说明

如果没有说明,可以注意一下 jfinal 大部分 API 都会提供相应的重载方法,这些重载方法可以实现不同的需求

2017-03-21 15:09

对代码进行单步调试,确认一下是哪个地方很慢

2017-03-21 14:56

@英俊的小铁匠 你的建议已经添加到了改进列表之中,后续如果有两到三个人提出同样的需求会考虑添加该 API,感谢你的反馈

2017-03-21 14:54

@hmgx 输出要等到第 0 秒,不是一开启会有反应,cron 表达式为 * * * * * 的含义一定要清楚

2017-03-20 21:06

升级到 jfinal 3.0,这个版本已经去掉了对 order by 子句的处理

以前的版本用正则去掉了分页方法中用于查询总记录数 sql 中的 order by 是为了提升性能,因为 select count(*) ... 这类 sql 是否存在 order by 并不影响最终的结果

2017-03-20 21:03

@广州雨人 参考一下这些博文:https://www.oschina.net/search?scope=blog&q=jfinal%20dubbo

2017-03-20 19:33

有了对比,才会在认知上更有深度,spring 由于过于繁琐庞大、过度设计、配置文件满天飞,所以才会出现 spring boot 这个项目给 spring 做简化工作,而 spring boot 中的很多功能 jfinal 早在五年前就有了,例如零配置、java config 这类概念、热加载,减少代码量等等设计目标

spring boot 本质上是在重走 jfinal 五年之前就开始走的路,但是 spring boot 底层仍然基于 spring 这个庞然大物,开发者看到的仅是浮出海面的冰山,而隐藏在海水之下的山体才是更大的麻烦,所以很多 spring boot 用户在开发过程中会不断要去学习 spring 有关的概念

jfinal 是极简设计,学习成本极低,WEB MVC + ORM + Template Engine 所有功能仅有 400K 左右的 jar 包,比 spring 体系要小得多,所以无论大家是否想用 jfinal 开发,掌握 jfinal 都是很容易并且值得的