2017-10-19 17:13
刚想到了一个更简单的办法:
1:Validator 中的 controller 属性是 protected 的,你可以通过定制一个自己的 MyValidator ,将父类的 controller 换成自己的 Controller 实现类 MockController
2:做一个 MockController 继承一下 Controller ,并持有当前请求的 controller 对象
3:在 MockController 中覆盖掉父类的 getPara(...) 这类方法,接管当前正在请求的真正的 controller 对象的行为
4:getPara() 接管之前,将当前真正的 controller 对象内的属性获取到,并且解析成为可以被 validate 的形式
记得搞定后回来分享
2017-10-19 17:09
@JennyJingXiao Validator 本质就是一个拦截器,你可以参考 Validator 中的代码改造为一个自己的 PostBodyValidator 出来,然后定制自己的 validateXxx 方法
2017-10-19 17:00
@lyq027 jfinal 的数据库功能,本质就是将 sql 与其参数直接转手给 jdbc,所以,只要是 jdbc 可以做到的, jfinal 都支持
2017-10-19 16:39
@lyq027 用一个 as 就可以了,例如: select sum(money) as money
不用 as 的话,也可以,只是不方便: model/record.get("sum(money)");
2017-10-18 19:59
在日志里面针对这个异常单独配置,忽略掉这个异常就可以了,假定你的配置前缀为 log4j,大致如下:
log4j.com.jfinal.render.FileRender = OFF
不太记得配置细节了,上面的配置可能是错误的,如果不对,再试试下面这个:
log4j.org.apache.catalina.connector.ClientAbortException = OFF
还有一个更好的办法就是通过继承 RenderFactory 并覆盖掉 getFileRender() 方法,接管这个以后用自己的 MyFileRender extends FileRender 来代替原来的实现
在 MyFileRender 中的大致代码如下:
try {
super.render();
} catch(Exception e) {
if (e.getMessage().contains("ClientAbortException") ) {
// 忽略;
} else {
throw new RuntimeException(e);
}
}