2016-10-12 17:36

在自建的 BaseController 中做这些事情即可,jfinal 社区就是这么用的,直接拿去用就好:
public class BaseController extends Controller {

private Account loginAccount = null;

public Account getLoginAccount() {
if (loginAccount == null) {
loginAccount = getAttr(LoginService.loginAccountCacheName);
if (loginAccount != null && ! loginAccount.isStatusOk()) {
throw new IllegalStateException("当前用户状态不允许登录,status = " + loginAccount.getStatus());
}
}
return loginAccount;
}

public boolean isLogin() {
return getLoginAccount() != null;
}

public boolean notLogin() {
return !isLogin();
}

/**
* 获取登录账户id,默认已经登录,所以不必判断 null 值
*/
public int getLoginAccountId() {
return getLoginAccount().getId();
}

/**
* 使用 ret.getData() 作为参数,调用父类的 renderJson(Object)
* 考虑添加该特性到 jfinal 2.3
*/
public void renderJson(Ret ret) {
renderJson(ret.getData());
}
}

2016-10-12 17:14

@spectre 多多支持社区,关注社区动态 ^_^

2016-10-12 17:10

@spectre 与 batchsize 有关,再设置大些,貌似最大可以设置为 5000,忘了

2016-10-12 16:46

@合金来了 可能是 jdbc 无法将这种类型转成 java.sql.Timestamp,建议通过继承 BaseModelGenerator 来改造一下生成器

2016-10-12 16:43

Db.batch 系列的方法就是专做这个的,有 Db.batchSave(...)、Db.batchUpdate(...)、Db.batch(...)

2016-10-12 16:08

@xRhbN jfinal 没有对第三方有强制依赖,所以无需重新打包开箱即用,jfinal 自身才 300K 左右,自己打包基本没有意义

2016-10-12 16:06

单步调试一下

2016-10-12 16:06

先确定数据库是 timestamp 类型,然后 jdbc 才有可能转换成 java.sql.Timestamp 类型

2016-10-12 16:04

@nbjgl 前面不是说得很清楚了,避免调用 next.handle(...) 那么 jfinal 后续的组件就不会接手,使用 isHandled[0] = true; 那么 jetty/tomcat 就不会接手,你确定这两项你都做了?

2016-10-12 16:03

@kojz redis 应该可以设置,找下相关文档

2016-10-12 15:34

样式需再美观一下,例如字体、行高之类的

2016-10-12 15:34

解决方法不需要多说了吧,简单说就是自己处理了,就不要再往下转手了

2016-10-12 15:33

在 Handler 中首先,你要决定是不是要将这个请求传递下去,注意以下几点:
1:当你不去调用 next.handle(...) 时,该请求不会传递给 jfinal 的 ActionHandler
2:当你设置 isHandle[0] = true 后,该请求不会传递给 tomcat、jetty
3:即便是向下传递下去了,接手的组件也会根据情况决定是否自己要处理,例如 ActionHandler 只处理动态请求,对于 /img/abc.jpg 这样的图片请求不会处理,会再转手给 tomcat、jetty
4:这一路下来,不能多次调用 response.getWriter() 并将其关闭

所以,问题原因就很显然了,你自己的代码中有一个 req.getDispatcher(...).forward(...) 已经操作过 writer 关闭,但后续仍然让这个请求继续转手给了 jfinal 或者 jetty/tomcat,而后面接手的组件以为自己还需要处理这个请求,造成重复处理,出异常

2016-10-12 15:28

@kojz 哪怕你是一个 new RedisPlugin(...) 也是有连接池,在连接池中有存在多个连接,否则多线程并发的时候会等待资源

2016-10-12 11:30

@白银骑士 renderJson 是一定会向客户端发送数据的,收不到的原因通常不是服务端的问题,例如是不是网络不通,是不是客户端程序有问题等等

总之不用在服务端找原因,因为 renderJson(object) 这个方法用了五年了,极度可靠