2017-08-10 17:08

@kyytyp 用 utf8mb4 省事,过滤以后再也回不来了

2017-08-10 16:58

在 handleError 方法中,通过 c.getAttrNames() 得到前面 validate 中 validateXxx 方法设置好的 attribute 的集合

然后再对这个集合迭代得到年有验证得到的提示信息值,并放在一个 Map 或者 Ret 对象中,然后通过 c.setAttr("ret", ret) 传给页面

最后 c.render("Error.html") 在 Error.html 中输出前面 setAttr 过来的值即可

2017-08-10 16:39

默认调用的这个事情,在手册上有过说明

2017-08-10 16:39

@Willson_L 当你没有调用 invoke(),也就是没有调用 controller,进而 controller 中的 render 方法也没被调用

当一个请求过来,至始至终都没有调用过 render 方法的话, jfinal 会默认帮你调用一下 render(view),而 view 的规则如下:
view = baseViewPath + viewPath + methodName + ".html"

其中 baseViewPath 是你在 configRoute(Routes me) 中通过 me.setBaseViewPath(...) 设置的,而 viewPath 是 me.add(controllerKey, controllerClass, viewPath) 时调协的

methodName 是你 action 的方法名

2017-08-10 15:08

看一下控制台输出的 jfinal action report,看 url 是什么,被访问的 action 是什么,如果 action 是对的,那么很可能是你的拦截器中的逻辑造成没有调用 inv.invoke() 这行代码

需要调用拦截器中的 inv.invoke() , 才能将调用从拦截器传递下去

2017-08-10 11:03

jfinal 的任何版本都是支持 mysql 5.7 的,所有功能的增强与改进都不涉及 mysql 版本

可能是别的原因,最好建议升级到 3.2 版本,因为你是 3.1 升到 3.2 很平滑

2017-08-10 11:01

老版本的 demo 仅仅是示例,并没有引入业务层。为了避免误导新人,后来的 demo 加入了 service 层,建议不论项目规模大小一定、一定、一定要引入 service 层

上面代码的 delete , 其实可以直接 blogi.delete(),因为 model 删除自身只要一个 id 即可,你甚至可以这样来删:
Blog blog = new Blog().setId(123);
blog.delete();

2017-08-10 10:51

@邓盛余 Db.batch 不支持返回自增主键

这部的文档确实不完善,现在可以看一下 batch 方法上的注释文档,有些给了例子代码

2017-08-10 10:49

getDeclaredMethod("init"); 改为 getMethod("init");

2017-08-09 23:31

这个问题无法三言两语说清楚,参考一下相关项目,这里有一个电商项目:http://git.oschina.net/hycx227/JFinalShop

2017-08-09 18:05

分库分表还是建议用专用的工具来做,例如这个项目:https://www.oschina.net/p/sharding-jdbc

我记得还有 mycat 这种项目也可以,对开发者是透明的,只需要把配置文件弄好就可以了

2017-08-09 18:01

YyConfig.java 第 129 行,有个对象是 null,但你调用了这个 null 上的方法,所以会有这个异常

2017-08-09 18:00

找到异常的 cause 信息指向的那个类的那一行代码,设置一个断点调试一下立即就可以解决

Null Pointer Exception 这种异常没有多少可以回复的空间了

2017-08-09 17:06

@芦苇 jfinal 的 sql 管理功能在底层使用的是模板引擎,比用 xml 管理要强大多了, enjoy it

2017-08-09 16:46

@webday 有一个 protected 的 _getAttrs() 方法可以使用,如果你想在继承类以外的地方使用,可以用一下 CPI.getAttrs(model) , just do it