2018-01-25 13:13

@我要做菜鸟 jfinal 也有很多办法来接管 session,例如,在 handler 或拦截器中接管 session 的实现,还可以通过在 BaseController 中接管 setSessionAttr(...) getSessionattr getSession() 这些方法来接管

2018-01-25 13:10

@Before(Tx.class) 是感知到异常以后,才回滚事务,当你自己的代码中有 try catch,并吃掉了 Exception 不再向上抛出时,上层的 Tx 拦截器是感知不到的

建议用 Db.tx(....) 来做事务,可以通过 return false 来控制事务回滚

2018-01-25 13:08

可以在 model 中添加相应的 getter 方法

2018-01-25 13:02

用 #define showMenu(...) 定义一个 function,然后递归调用之

2018-01-25 12:46

用纯 JDBC 试一试可不可以查出来,然后再探讨下一步

2018-01-24 23:42

使用 model 而不是 Db 静态方法来查询,返回的结果是封装好的 Model,这些 Model 还生成过 getter setter 方法,在开发过程中使用这些 setter getter 方法对于重构有好处,而且不需要记忆字段名

当你使用 Db 查询时,得到 Record 对象,取值时需要这样: record.get(字段名),这不仅有记忆上的负担,对于重构来说也不方便,而且字段名写错以后也可能引发 bug

此外,model 中还可以实现一些其它的方法,在使用过程中的好处不言而喻,例如,你看一下 jfinal club 项目中的 Account 在 LoginServer 中的用法:
if (loginAccount.isStatusLockId()) {
return Ret.fail("msg", "账号已被锁定");
}

如果使用的是 Record,你需要这样来操作:
if (record.getInt("status") == -1) {
return Ret.fail("msg", "账号已被锁定");
}

无论是在可读性还是可维护性上都会差很多,在多数应用场景下都会使用 Model,也有一些比较特殊的场景特别适合使用 Db + Record 模式

例如,做一个具有大量关联查询的报表系统,多表关联出来的字段值,在 model 中很多都没有相应的 getter setter 方法,所以前面谈到的有关 setter getter 方法带来的优势也就没有了

2018-01-24 20:51

在 windows 上开的时候,表名是不区分大小写,而在 Linux 中是区分的,表名建议全部改为小写字母。当然,也可以通过配置 mysql 来解决,不建议这么做

2018-01-24 20:44

@瑶琴频曲羽衣魂 用 datetime 与 date 这两个类型,不建议用 time

2018-01-24 18:28

@瑶琴频曲羽衣魂 用的是什么数据库? 用的 jfinal 哪个版本?

2018-01-24 15:56

@rock_ping 用这个办法解决一下:http://www.jfinal.com/share/410

2018-01-24 13:30

直接显示指令应该是没走模板擎:
render(...)

2018-01-24 10:56

用 redirect(...)

2018-01-24 10:35

@航程序员 http://www.jfinal.com/share/419

2018-01-23 11:16

@jffly 这个方法仅仅是转移了而已,转到了 configRoute(Routes routes) 之中,用法与规则完全一样:
routes.setBaseViewPath(...)

看一下手册:baseViewPath

2018-01-22 20:51

@leomj 应该是可以的,注意一下参数实际上到底是不是 null