2019-01-31 14:07
@lyaoyaoo113 catch StoppedSessionException 这个异常用着还可以
当然最好还是要找到办法确认当前的 ShiroHttpSession 是否真的不可用。 建议看看 shiro 让 ShiroHttpSession 不可用的那段源码,应该会改变对象里面的某个状态,否则 shiro 自己都没法好好使用了
记得搞定后再回来分享一下,可能会有其他小伙伴碰到这个问题,需要你的分享
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: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 或许是为了提升性能才有了这个变化