2017-08-07 19:35

不用担心,嵌套事务会合并为一个事务,单步调试 Tx.java 即可知道

2017-08-07 19:34

将 cos-26Dec2008.jar 升级到 cos-2017.5.jar 版本

在本站首页可以下载到 jfinal-3.1-all.zip, 从 maven 库中也可以得到

2017-08-07 19:32

@吃桃子的松鼠 先确保 id 字段是自增的,也即在创建时需要设置 autoincreament

其次保障字段名是正确的,例如名称为 "id" 时,通过 getId() 或者 get("id") 获取

2017-08-07 19:23

换一个思路解决,在 configInterceptor(Interceptors me) 方法中添加一个业务层全局拦截器:
me.addGlobalServiceInterceptor(new MyInterceptor());

然后让这个 MyInterceptor 去决定哪些目标有拦截动作,哪些该直接放行,大致逻辑如下:
public void intercept(Invocation inv) {
Object target = inv.getTarget();
if (needInterceptTarget(target)) {
doInterept(target);
}

inv.invoke();
}

2017-08-07 19:17

@Jason、 参考 FakeStaticHandler 稍微改点代码即可解决,大致方向是将 String target 这个值变成最终可以抵达 action 的正确值

例如 target = "detail/25.html" 这种风格,用类似下面的代码搞定:
int index = target.lastIndexof(".");
if (index != -1) {
target = target.substring(0, index);
}
next.handle(target, request, response, isHandled);

然后在 controller 中可以这样:
Integer id = getParaToInt();
setAttr("item", xxService.detail(id));
render(...);

看 FakeStaticHandler 关键在于举一反三,而不在于直接使用

2017-08-07 15:30

参考一下 com.jfinal.ext.handler.FakeStaticHandler 中做伪静态的代码

2017-08-07 15:26

必然可以,用下 @ActionKey(....) 即可

2017-08-07 12:47

改成 protected 可以很方便在继承类中调用,但不方便在拦截器里头调用,可以借签一下 com.jfinal.plugin.activerecord 包下面的 CPI 工具类,让这个工具类与你的 BaseController 在同一个包之让,让 CPI 转调一下即可,用起来还是蛮方便的,例如在拦截器中可以这样:
BaseController bc = (BaseController)inv.getController();
CPI.jsonpRender(bc, jsonText);

2017-08-07 12:43

下一版本会考虑添加一个 @NotAction 注解,跳过这些不希望被当成 action 的方法

2017-08-07 12:38

改成 protected 就可以了

2017-08-07 10:41

@yjjdick1990 自己写一个简单的 web 界面来实现缓存观察的功能,读取数据也用 fst 反序列化就没问题了

试着查看一下 redisDesktopManager 这个工具可不可以指定反序列化与序列化实现类,扩展一下是最好的

2017-08-07 10:39

升级到 jfinal 3.2 即可,去群里找我要 jfinal 3.2 的手册,升级需要注意一个地方

2017-08-07 10:38

Controller 中的 createToken() validateToken() 会自动去使用 token manager 下的缓存,通常不需要人工干预

要干预的情况是在做分布式与集群时,需要将 token 存放在一个集中式的缓存之中,可以通过 TokenManager.init(ITokenCache tokenCache) 来指定一个集中式的 tokenCache 即可

2017-08-07 10:34

代码写得十分工整,这段时间功力精进不少啊

2017-08-06 16:40

这个不是乱码,是 fst 将数据序列化以后有一个标识性的前缀,以便于做反向序列化

通过 redisPlugin.setSerializer(...) 可以切换序列化实现类