2019-01-31 14:07

@lyaoyaoo113 catch StoppedSessionException 这个异常用着还可以

当然最好还是要找到办法确认当前的 ShiroHttpSession 是否真的不可用。 建议看看 shiro 让 ShiroHttpSession 不可用的那段源码,应该会改变对象里面的某个状态,否则 shiro 自己都没法好好使用了

记得搞定后再回来分享一下,可能会有其他小伙伴碰到这个问题,需要你的分享

2019-01-31 01:26

jfinal 3.6 已发布到 maven 中心库,升级后完美解决

2019-01-31 00:55

jfinal undertow 1.5 以及 jfinal 3.6 已发布到 maven 中心库,升级用上这两个新版本,所有问题全解决了

2019-01-31 00:52

jfinal weixin 2.2 已发布到 maven 中心库,可以使用了,记得回来反馈

2019-01-30 18:44

这里确实还没有考虑端口号,建议通过继承 RedirectRender 做一下扩展,然后用的时候:
render(new MyRedirectRender(....));

其中 MyRedirectRender 是你参考 RedirectRender 做出的扩展

2019-01-30 17:20

假定你改进后的拦截器名字叫: MySessionInView

配置的时候,用 me.add(new MySessionInView()), 代替 jfinal 原有的 SessionInViewInterceptor 即可

2019-01-30 17:19

将 SessionInViewInterceptor 源码拿到手,然后改进一下这个源码

大致的改进方法是,在 SessionInViewInterceptor 中获取 session 后对其进行一下判断,如果 session 已经不可用了,或者说是被 Shrio 停止过的,则不使用它即可

2019-01-30 11:10

线上最新版已经更新这个问题很久了,明天发新版

2019-01-30 11:09

去掉 connection.close()

此外代码严重有问题,业务逻辑放业务层,复杂 sql 用 jfinal 的 sql 管理功能

2019-01-29 21:43

这里还有一个类似的贴子:
http://www.jfinal.com/feedback/3638

2019-01-29 21:42

这个问题得到了确证,是 JKD 1.8 的问题,目前 jfinal 3.6 已经对此做了适配性调整,但 jfinal 3.6 要过几天才能发布

目前建议的解决办法如下:
1:改用 deleteById,例如:Db.deleteById("user", "id", record.getInt("id"));
2:使用线上最新版本: git@gitee.com:jfinal/jfinal.git
线上最新版本使用下面的办法安装到本地:
git clone git@gitee.com:jfinal/jfinal.git
cd jfinal
mvn clean install
安装完成后,项目中的 3.5 版本号改成 3.6-SNAPSHOT

以上两个办法,两者选其一就可以。

Db 工具类中有很多可选方法可以使用,有两个方法会由 JDK 1.8 产生问题,换成别的方法代替就可以解决了。

过几天会发布 jfinal 3.6

2019-01-29 21:42

JDK 8 相对于低版本 JDK 的这个行为,还影响到了 Model.findById(...) 、Model.deleteById(...)、 Db.findById(...) 这三个方法,jfinal 3.6 改进了这里,避免了 JDK 8 带来的影响

对于 findFirst 来说,目前的解决办法只能是上个回复里头的方法。

2019-01-29 21:39

在 JDK 8 之下,如果方法参数是 Object ... paras 类型,并且传入的参数值是通过调用方法获取的,并且这个方法返回的是泛型的话,就会出现这个类型转换异常问题

也就是说要同时满足下面几个条件才会出现:
1:JDK 版本是 8 或更高
2:方法原型中带有一个 Object... paras 参数
3:传入参数时是方法调用,例如 record.get("title")、getAttr(...) 等等
4:第三条中的方法调用的返回值类型是泛型,例如上面的 record.get(...) 与 getAttr(...) 返回值类型都是泛型

解决办法极其简单,下面的方法任选其一:
1:使用强制类型转换,例如:findFirst(..., (Object)getAttr(...));
2:引入一个中间变量,例如:
Object para = getAttr(...);
findFirst(..., para);

解决方案都是为了消除 JDK 8 的 Object... 传参类型错误的问题,低版本 JDK 没有这个问题。

高版本的 JDK 或许是为了提升性能才有了这个变化

2019-01-29 17:16

这么说吧,找一个已经被加载到 class path 的任何 java 类, 然后看看这个 Java 类为啥可以被加载到 class path,然后尝试将 model 与那个 java 类同样去对对待即可