2018-08-19 16:11

@wesleyxw 多域名下获取微信 openId 这个功能还从没有人分享过,在某些场景下很有价值

贴代码有个专用按钮,可以贴出来 html、xml、java 等常见代码格式,注意看可视化编辑器上方的 icon,鼠标停留时会显示功能提示

感谢分享,点赞收藏

2018-08-19 11:42

@sunz 建议直接使用 jfinal 的模板引擎,比 JSP 要方便得多,上面的 c:if =test=.. 改成 #if (...) 很容易

使用 jfinal 的模板引擎时,页面的扩展名可以不用 ".jsp" , 一般建议用 ".html",最后注意一下不要使用 renderJsp,而是直接 render(...)

这里有详细的文档,10 分钟内学会 95% 的功能足够用了:
http://www.jfinal.com/doc/6-1

2018-08-19 11:14

c:if 标签是 jsp 中的用法,后端注意要使用 renderJsp(...),并且你的模板必须是 ".jsp" 扩展名

2018-08-17 18:02

最后,缓存 "不建议" 做到 model 层, service 层也不太建议直接做缓存,而是将缓存做成可插拔的独立组件,例如用拦截器在业务层或者控制层来做缓存

缓存做成控制层拦截器,性能是最好的,因为请求最早到达的是控制器,在控制器拦截器中就响应客户端缓存中的数据,时机是最早的

2018-08-17 17:58

@fansunion 你自己要做缓存,可以用拦截器来做,参考一下 com.jfinal.plugin.ehcache 的实现方法,里头有一个 CacheInterceptor 以及自定义的注解 @CacheName

2018-08-17 17:56

Ehcache 在 jfinal 中作为一个插件存在,在 ActiveRecordPlugin 这个插件中是依赖于 ICache 这个接口,并且为这个 ICache 这个接口提供了一个 ehcache 的默认实现

如果要说 jfinal 对 ehcache 绑得比较紧,只能说是 ActiveRecordPlugin 中的 ICache 接口设计对 ehcache 有所顾及,因为 ehcache 操作数据时需要 cacheName 与 key 两个参数

随着未来 cache 技术的发展,jfinal 的 ActiveRecordPlugin 会考虑对 ICache 做细微调整,例如将 cacheName、key 合并为一个参数 key

jfinal 整体上并没有 cache 接口与实现,仅仅只有 ActiveRecordPlugin 中有一个 ICache, 此外再提供了一个独立的 EhcachePlugin

2018-08-17 16:52

@fansunion 还可以用正则表达式控制,总之拿到 actionKey、controllerKey 玩法就多了

2018-08-17 16:39

用 modelName 前缀来区分一下即可,例如:
name="userAaa.name"
name="userBbb.name"

后台接收的时候:
getModel(User.class, "userAaa");
getModel(User.class, "userBbb");

2018-08-17 16:37

https://blog.csdn.net/u014704879/article/details/41479399

2018-08-17 16:36

@陈伟 使用内置的 #number 指令,具体用法见文档,其中的 format 参数搜索一下 DecimalFormat

2018-08-17 12:03

@小智zaki jfinal demo 中的生成器直接拿去用就好

2018-08-17 11:05

@小智zaki _MappingKit 这个类是要先运行生成器,然后才会自动生成的,这个类默认是不存在的

下载首页的 jfinal demo,删掉里面的 _MappingKit.java ,然后用里面有一个生成器,运行里面的 main 方法,这时就会发现生成器再次生成了 _MappingKit.java

2018-08-17 10:25

@JM-java jfinal 的 ActionHandler 里面会 catch 到所有你没有 catch 过的异常,会自动写入日志,你只需要配置好 log4j.properties 文件即可

2018-08-16 22:12

如果向数据库写日志,应该做成异步的,具体做法是所有的写日志操作都是向一个队列里面写,这样能确保当前线程立即就返回做正事

然后让另一个线程专门从队列里面取日志并写入数据库

最后,日志数据应该单独存放在一个独立的数据库里面,该数据库要与业务数据库分开,以免拖累业务数据库的性能

2018-08-16 22:07

做一个全局拦截器,然后在拦截器里头通过 inv.getActionKey() 或者 inv.getActionController() 得到一个类似包路径的字符串,再做点 if 判断就可以控制了

此外,还可以通过使用 Routes 级别的拦截器分组进行拦截:
http://www.jfinal.com/doc/4-7