2017-08-16 16:09

我再补充一下,我前面讲的你可以利用 jfinal 全局拦截器,其实还可以做得更好,你可以做一个专用于动态的拦截器叫:
public class DynamicInterceptor implements Interceptor

然后完全参考 InterceptorStack 与 InvocationWrapper 的工作方式,只要在里面将内部的拦截器变成读数据库动态化就可以了

2017-08-16 16:07

@麻言 为了性能最大化,jfinal 里面的所有的控制层拦截器是在系统启动的时候,一次性建立好对应关系的,这个关系那好以后就存放在了 Action 这个对象里头,是不能改变的

但这仅仅是 jfinal 层面上的解决方案,你完全可以添加一个 jfinal 全局拦截器,然后在这个拦截器里面添加一个自己的拦截器架构,让这个架构可以动态配置就可以了

仿照一下 jfinal 的已有拦截器体系,在全局拦截器内部再搞一个拦截器体系出来就可以动态化了

重点在于对 Invocation 与 Interceptor 工作方式的理解决,可以看一下 InterceptorStack 这个类中的 intercept(...) 方法中的 new InvocationWrapper(inv, inters).invoke(); 这行代码,仿照着写一个很容易

2017-08-16 16:02

@mingxin1021 由于 BaseModelGenerator 这个对于生成器来说是必须的,所以需要通过构造方法传进去,前面是笔误,更正如下:
new Generator(new MyBaseModelGenerator());

2017-08-16 15:53

@Willson_L 很久以前用过 lucene,后来貌似有对 lucene 封装得更好的第三方了,建议你在俱乐部群里问问有经验的同学

2017-08-16 15:50

@素夜儿 获取到的 token 值,在 jfinal weixin 这一端会每次都检测是否有效,所以,无论微信平台的行为是什么,都足以应对了

微信平台的文档经常出错,而且平台也有 bug,经常与文档描停不符

我建议这样,你在用的时候,如果出现了微信平台时间上的不对,看看 jfinal weiwixn 是否重新获取了 token 值,是否解决了平台的错误,作为一个 sdk 如果微信平台有问题,能解决它的问题就很好了

2017-08-16 15:46

看一下控制台输出的 jfinal action report 中的 parameter 这一栏,如果数据没有传过来,自然也就接收不到了

然后通过在浏览器中按一下 F12,再发起请求,就能知道请求根本没发送出去

2017-08-16 15:43

当然不是,你可以通过 activeRecordPlugin.setCache(...) 来改变缓存实现类

2017-08-15 18:41

单步调试看是哪一个环节出的乱码,这个问题没有别的办法,只能是找到根源

2017-08-15 18:40

@Bay_Max 可以用 Tx 拦截器,但你要确保拦截器可以被触发,触发方式看一下 jfinal 手册,我个人喜欢用 Db.tx(...)

2017-08-15 17:48

@素夜儿 access token 在每次获取以后,都会判断是否有效/是否过期,如果无效就会重新利用 AccessTokenApi 去请求并更新缓存中的 access token

jsapi_ticket 这部分是后来 @如梦技术 大神开发的,里面的细节我不了解,估计与 access token 是一样的,建议看看相关源代码,或者与 @如梦技术 交流一下

2017-08-15 16:48

对多 tomcat 一个一个更新,不需要停服, nginx 会自动将请求转发到正在服务的 tomcat

写一个脚本将这些事情自动化。如果想玩得更深入点,可以引入一些专业化的工具,例如 jenkins

2017-08-15 16:47

生产环境用 nginx + 多 tomcat,然后用 git 或 svn 更新代码,用 maven 编译,启动 tomcat 就可以了

2017-08-15 16:25

注意上面的 isOldProjectNeedProcess(String) 是你应该要去实现的一个方法,根据 target 参数判断是不是老项目该处理的请求url,target 这个参数你可以认为就是url

2017-08-15 16:24

在 web.xml 中添加 JFinalFilter 就整合完成了,唯一要注意的是 JFinalFilter 与 web.xml 已有的 Filter 拦截的次序问题,如果 SSH 的 Filter 配置在前面,会先拦截请求,如果没有将请求放行的话, jfinal 就收不到请求

建议将 JFinalFilter 配置在 SSH 用的 Filter 之前。 然后为 jfinal 添加一个 handler,放行一些应该老项目处理的 url,大致这样的 handler 代码:
if (isOldProjectNeedProcess(target)) {
return ;
}
next.handled(target, request, response, isHandled);

2017-08-15 16:21

@高达1234 在本站首页右侧可以下载到 Enjoy 3.2 手册,内容很少,一会就看完了。表达式规则与 java 保持一致,所以学习成本很低