2017-04-13 18:44
configEngine(Engine engine) 这个方法内不建议配置 engine.setBaseTemplatePath(...),因为这个配置是留给独立使用 template engine 的场景用的
而 web 项目的场景让其直接就是 webroot 是最佳的,如果你设置成为 webroot + "/themes",那么希望再访问 webroot 之下的模板或者 webroot 之下其它非 "themes" 之下的模板就无法实现
对于你的应用场景,在 configRoute(Routes routes) 中使用 routes.setBaseViewPath("/themes") 才是最好的实践方式,这里的配置指定的路径是相对于 webroot 的,非常易于使用
不仅如此, Routes 还可以针对不同的模块独立配置,具体配置方式详细 jfinal club 项目源代码,极其好用
2017-04-13 15:43
@要输就输给追求 微信买单成功后会向手机微信推送消息,你可以在电脑上用 android 模拟器运行一个微信客户端,拿到这个推送的消息就可以做相关业务了
脑子要多转转
2017-04-13 14:40
@hiberk 通过继承一下 MetaBuilder 类,然后覆盖掉其中的 isSkipTable(String tableName) 方法,可以随心所欲控制想要的处理的 table
isSkipTable 方法 return true 时将过滤掉当前 table,可以利用正则,或者其它自己合适的方式设置规则,只处理自己想要的 table
generator 模块所有组件都面向扩展设计,可以通过继承自由定制功能
2017-04-13 14:34
@芒果过敏 只要是多线程可以同时访问的对象就要注意线程安全,是你的代码中有 static,表明有对象是全局共享的,不仅这个 static 声明的对象要注意线程安全,而且这种共享可以像链条一样一直传递下去
性能方面几乎没有差别多调一层方法而已
2017-04-13 11:21
办法有很多,这里只说三种:
1:创建该拦截器的一个继承类,在构造方法中直接 new UserService() 给它用
2:自定义一个注解,让这个注解可以接收一个 class 形参数,例如创建一个名为ConfigService的注解:
@ConfigService(UserService.class)
然后在你的那个 TestInterceptor 中通过下面的方法创建:
Class serviceClass = inv.getMethod.getAnnotation(ConfigService.class).value();
然后再创建这个业务类对象:
serviceClass.newInstance();
打完收枪
3:还可通过 url 或者 setAttr 或者 threadlocal 来传个参到拦截器,拦截器再做出判断