2017-02-24 11:30

@TonyWang 这样扩展也挺好,Controller.render(Render) 这个方法就是为这类场景设计的

是否要使用 "Cache-Control" 这个在最初的版本的确也纠结过,忘了当时做这个决定的关键原因了

2017-02-24 11:26

@qiushui90 不建议用 dialect 实现,因为你要的这个功能不属于 dialect 的功能范畴,项目在将来进化过程中,很可能忽视这里,造成问题

2017-02-24 10:59

@qiushui90 有很多解决方案,以下方案选择其一即可:
1:在自己的 model 中创建一个boolean filter(int type) 方法去实现,这个方法会被save()、update() 回调
2:在自己的 model 中创建 save()、update() 覆盖掉父类的方法实现功能,最后再添加一句:return super.save(); 或 return super.update()
3:自己建个 BaseModel,再扩展一下 BaseModelGenereator,多生成一下 save()、update()方法,在其中实现功能

2017-02-24 10:54

@rapin 用上昨天发给你代码以后全搞定了吧?

2017-02-24 10:54

@qin 这里只是设置的代码,而这段代码中所依赖的 "encryptMessage" 依赖于你项目中的配置文件,前面所讲的“项目中配置也不启动加密”是指项目配置文件中的“encryptMessage”配置

2017-02-24 10:52

@mutolee 多看看手册,基本的用法都有代码示例,能省很多时间

2017-02-23 23:35

此外,将 c3p0 换成 DruidPlugin

2017-02-23 23:35

数据库连接超时,看一下是否网络不稳定

2017-02-23 23:34

jfinal weixin 项目中源代码下的 demo 目录下面就是 demo,直接用就好,注意使用 1.8 版本,这才是稳定版本

2017-02-23 22:15

大部分情况下,客户端获取到的 json 数据是动态的,并不希望被浏览器缓存,所以 JsonRender 中添加了 "Cache-Control" 配置

解决的办法极其简单:
1:创建一个class MyJsonRender extends JsonRender,覆盖掉父类中的 render() 方法,去掉其中的 setHeader 调用
2:创建一个 class MyRenderFactory extends RenderFactory,覆盖掉其中的 getJsonRender() 方法,在方法体内使用 render new MyJsonRender(...)
3:在 configConstant(Constants me) 中通过 me.setRenderFactory(new MyRenderFactory()) 切换为自己的实现类

通过以上方法可以替换任何 Controller 中的 render 方法所依赖的实现类

2017-02-23 20:27

在微信平台关闭加密的配置以后,在项目中也要配置不启动加密,这两者是有关联的

2017-02-23 20:18

@rapin 在发布新版本后写新版本文档时发现了这个需求,在没有发行的版本已经支持了,放开了对 #p 指令参数类型的判断

以前对 #p 指令的参数类型判断严格是为了避免开发者传入错误的数据库类型造成错误,没注意到 #p(map.value) 这种需求的存在

2017-02-23 18:45

有一个非常典型的用法是,传入的条件参数是 map 型,而生成 where 条件的时候,直接对 map 进行迭代,大致是这样的:

select * from table where status = #(statusOK)
#for(cond:condMap)
and #(cond.key) = #p(cond.value)
#end

注意上面的指令,and 后面的第一个是在用输出指令#()输出 map 中的属性名,后面的 #p 指令是将 map 中的属性值放入 paraList 中,并输出一个问号字符 '?' ,这样就起来就完全没阻碍了

2017-02-23 18:41

你是第一个发现 #p 指令只支持 identify 的,这个 p 指令已经删掉了对表达式类型的限制,如果你加入了俱乐部可以找我要最新的代码,如果没加入,去 jfinal 官方群里找我

2017-02-23 18:17

@Ferrari8899 value 不是属性值,只是个示例,你可以样:#(session.a.b.c.d.x.y.z)