2016-12-12 14:54

对于有些只有 view 这个属性的 render ,可以只保存 view,然后在从缓存取出来的时候恢复一下这个值即可,但对于 JsonRender 这类有多个属性的 render,就需要恢复出更多的属性值来才能重建 render 对象,所以对于框架来说,需要通过接口或抽象的方式来做成通用的

感谢分享

2016-12-12 14:35

在正常的情况下,只要你的 web 项目配置是没问题的,PathKit.getWebRootPath() 就一定可以返回正确的路径,这个方法用了快五年了,不可能有 bug

2016-12-12 14:34

@似水流言1 不使用jfinal 的集成启动方式,更加没有关系,不需要理会前面我说的参数问题,只需要让 PathKit.getWebRootPath() 这个方法返回正确的路径就好

如果确实没有办法做到,可以在 YourJFinalConfig 的 configConstant(Constants me) 中通过 PathKit.setWebRootPath(...) 手动强制指定,但是这个虽然是解决了眼前的问题,但你的整个 web 项目所依赖的路径可能还是存在别的问题

2016-12-12 14:22

@似水流言1 这个已经被无数次证实过的,另外启动的时候,如果是 maven 项目的目录结构,注意四个启动参数是:src/main/webapp 80 / 5

2016-12-12 14:15

这个与项目设置的路径有关,例如你的项目将 web root 路径设置在 abc 下面,那 PathKit.getWebRootPath() 得到的就是 abc,将项目配置好即可

2016-12-12 14:14

@IvyHelen 不需要那么麻烦,只需要 public class MyRender extends CaptchaRender 然后覆盖掉其中的相关方法,用的时候这样用:render(new MyRender()) 即可

有功能需求尽量用扩展的方式,有助于未来升级,修改源码的方式只有在没有扩展办法的时候用一用

2016-12-12 11:08

jfinal 仅仅是简单地将 sql 语句与参数直接扔给 JDBC 去执行数据库操作,所以当希望做某事的时候,把以前 JDBC 的经验拿过来把 sql 写好即可:Db.find(sql, p1, ..., pn)

2016-12-11 17:31

@奋斗-now 2.3 是即将发布的新版本,正在内测中,多多关注社区动态

2016-12-11 11:55

创建一个public class MyDialect exnteds MysqlDialect 覆盖掉其中的 replaceOrderBy 方法,在方法体中直接放一行代码 return sql ,然后通过 arp.setDialect(new MyDialect()) 使用自己扩展的方言取而代之即可

原因是分页方法会生成一个查询分页总记录的 sql,为了提升性这个 sql 会利用正则将 order by 子句去掉,因为查询总记录与 order by 子句无关,而 order by 语句可以是极其复杂的,目前的正则无法完全覆盖

jfinal 2.3 已彻底解决此问题

2016-12-10 18:44

oracle 将字段转成了 BigDecimal,所以 getInt 会报类型转换错误,建议定制一个 BaseModel extends Model,将其中的 getInt方法覆盖掉,改为 return getNumber(attr).intValue() 这样就支持所有数值类型了

然后生成器生成的 XxxBaseModel 从以前的继承 Model 改为继承自你自己定义的 BaseModel

2016-12-10 18:41

@柒爱 Db.tx(...) 支持事务,手动 jdbc 就是自行获取连接,用纯 jdbc 的操作方式来做

2016-12-10 16:03

最好用 Db,一个 sql 全搞定:Db.update("delete from a_r where admin_id=? and rol_id=?", adminId, roleId)

如果不用 Db 的话,可以手动连下 jdbc,然后发条 sql 删也是一样的

2016-12-10 14:43

model.deleteById(id1, id2)

2016-12-10 10:16

@fangjunai 如果要可写,那要考虑的事情就多多了,jfinal 会为了保持极简性而权衡不去实现一些用得比较少的功能,这部分功能留给大家自由发挥