2019-11-23 16:30

getPara 这个方法的返回值为 String , 使用了八年多了,如果改变返回值让其成为 String[] , 我肯定会被骂死

2019-11-23 16:28

@zzutligang 单例必须考虑线程安全问题,一般业务层做成无状态的,天然就是线程安全的即可

你可以在不能是 singleton 的 service 上用注解来解决,例如:
@Singleton(false)
public class BlogService {
...
}

2019-11-23 14:51

jfinal 为了极致性能,是将所有路由在项目启动的时候一次性初始化的,不支持动态路由

@海哥 对 jfinal 有扩展过这个功能,可以看看他的 #jboot 项目:
https://gitee.com/fuhai/jboot

2019-11-23 11:41

主要区别如下:
1:节省点代码

2:@Inject 的方式支持 singleton,而 new BlogService() 每次要创建新对象(除非使用 static 关键字)

3:@Inject 可以注入接口的实现类,类的子类,抽象类的子类,这样就可以实现动态化,而 new BlogService 中的 BlogService 类型是写死在代码中的

4:@Inject 在注入的时候便于实现 AOP,被注入的对象上如果使用了 @Before 拦截器是生效的。而 new BlogService() 的方式在里头用的 @Before 将不起作用

2019-11-23 10:22

你的这个发现有价值,刚刚 jfinal 4.8 版本已经改进了这个地方,放开了 #set 指令对于自增、自减表达式的使用,代码具体改变在此:
https://gitee.com/jfinal/jfinal/commit/4eccbe9bee347cdd6c32bf07c9d3e7b5f9f43912

2019-11-23 10:06

#set、#setLocal、#setGlobal 这三个指令被限定为了只支持 "赋值表达式", 而 k++、k-- 是自增与自减表达式

建议使用 #setLocal(k=k+1) , 或者在别指令中使用,例如:
#(k++, "")

以上输出指令中用到了逗号表达式,其中第一个表达式中就是 k++,不影响输出

2019-11-23 00:57

信息量不足,我只能猜出一点点有关的信息,希望对你有帮助

getSession() 方法可以创建 session 对象,如果不调用它的话, session 对象是始终不存在的
你在 SessionInterceptor 中调用 controller.getSession() 后会创建 session,后续在用的时候与之有关联,可能是这个相关性

还是那句话,不要猜谜,要单步调试,看代码到怎么在做什么

2019-11-22 21:27

信息量严重不足

2019-11-22 21:26

代码简单实用,赞

此外,可以考虑做个 BaseController extends Controller,在其中添加一个 getUser 方法,例如:
public class BaseController extends Controller {
@Inject
private UserService service;
@Inject
private ControllerAssist controllerAssist;

private User getUser() {
return (User) controllerAssist.getObject(User.class, getRawData());
}
}

然后在用的地方只需要继承 BaseController 来使用了

2019-11-22 16:29

可能是你用的 jedis 版本冲突

2019-11-22 16:27

@yunqi 在 jfinal club 项目中就是简单一行代码打完收工:
setCookie(LoginService.sessionIdName, sessionId, maxAgeInSeconds, true);

2019-11-22 15:29

@qq409001213 还是那句话,一定要找到能在本地重现的办法

2019-11-22 15:29

@yunqi 可以直接让浏览器关闭就失效,不需要这么麻烦

2019-11-22 15:28

不要搞这么麻烦, jar 包挪走后 class path 没相应配置好

2019-11-22 15:26

第 3、6、7、8 行代码可以去掉,最后一行改成:
return f1 & f2;