2017-09-27 21:36
确实会碰到这个初始化次序的事情,最简单的办法是将 Redis.use(...) 放在 put 方法内部还有一个办法是通过一个 static Constants constants 属性在 configConstant(Constants me) 中通过下面的代码将 me 存起来:constants = me;然后创建一个方法来操作:public void afterJFinalStart() { constants.setCaptchaCache(...);}afterJFinalStart() 的说明见 jfinal 手册
2017-09-27 21:33
@djs19960601 打成 jar 以后是怎么启动的项目? 通过 java -jar .... 启动的? 入口方法是哪个?
2017-09-27 21:21
model 是由于在 arp.addMapping(....) 时就建立了与数据源的关联,而 Record 这个对象是人各个数据源通用的,不可能与某一个数据源建立关联除了 Db.use(...) 还可以通过多种方式扩展,例如通过拦截器来动态切换,这里有一些例子:http://www.jfinal.com/share/236
2017-09-27 21:19
shrioFilter 配置在 JFinalFilter 之后试试, filter 的生效是有先后次序的
2017-09-27 21:18
实现一下 ITokenCache 接口,然后通过 me.setTokenCache(new MyTokenCache()) 即可切换到自己的实现ITokenCache 接口只有 put remove 等基本的方法,具体实现为 redis 还是数据库都很方便,别忘了搞定后回来分享一下哈
2017-09-27 20:22
@喜欢自在 文章中的用法性能没有问题
2017-09-27 18:13
正常的 404 应该是出现jfinal 的 404 页面,类似于这个页面:http://www.jfinal.com/a/b/c/d而你出现的是 jetty 的 404 页面,证明 jfinal 并未真正启动,可能是 web.xml 中的配置有误
2017-09-27 18:10
我记得 cron4j 的表达式只有五个部分,而你的代码中是 6 部分,先拿全部是 * 号的表达式测试一下,然后改成自己想要的表达式多数错误是表达式写错而引起的,建议看一下 jfinal 手册中有关表达式每个部分的说明,参照着做就好
2017-09-27 18:08
有些情况 contextPath 为 "/",所以要对此进行判断,而为 "" 的情况,正好 length() 值为 0,这段代码依然正常
2017-09-27 16:32
后台管理部分做得不错,点赞收藏一个
2017-09-27 16:10
如果用了 public static final Xxx me 并且配合 private 构造方法,则就会变成单例的,因为 private 构造方法可以阻止 new 出对象来通常只要将业务层做成无状态的,让所有状态都放在数据库或者共享的中心缓存中,就可以使用这种模式不仅省去了 IOC 容器、省去了大量的 XML 或 annotation 进行注入装配、提升了性能、减少了代码量,而且还无比简单好理解。更重要一点就是:无状态的业务层,让分布式与集群变得无比方便,无状态的业务层为下一步的分布式与集群做好了充分的准备
2017-09-27 12:07
不是有没有必要, 而是必须要引入,以前老版本的 demo 仅仅是演示,没入 service 进去误导了不少人,新版本的 demo 加入了 service
2017-09-27 11:34
补充一下,如果逼不得已经使用 /friendship/rKJGdAKPm/profile 这样的路由,也只需要添加一个 Handler 做下转换就好,有几个用户在对接第三方的时候碰到这种需求就是通过 Handler 转换搞定的,非常容易参考一下 jfinal 里的 com.jfinal.ext.handler 包下面的源代码,自己写一个
2017-09-27 11:33
你把指令扩展与 shared method 搞混了,再仔细看一下手册, shared method 是利用普通的 java 类,而不需要实现任何接口或继承任何类
2017-09-27 11:13
@liuvlun 如果你不使用 fst 序列化就可以删掉 fst 这个包,这样配置一下:redisPlugin.setSerializer(new JdkSerializer());