2020-03-04 16:27
@jounzhang 最后,再结合 #include 指令,按模块拆分的 sql 文件可以再整合到一起,当然,也可以多次调用 arp.addSqlTemplate 来添加,不需要 #include
2020-03-04 16:26
@jounzhang 直接在sql中使用aaa.bbb.ccc.ddd来标识sql 是一个既巧妙,又很简单有效的方法,超赞
这就好比 jfinal 路由中的 controllerKey 中可以包含 "/" 字符一样,虽然明面上是没有支持 namespace,但在实质上也支持了 namespace
2020-03-04 15:19
@becklu 已在文档中添加, 感谢反馈:
https://jfinal.com/doc/1-6
2020-03-02 22:38
@sliver 对于拥有非常多 post 请求,也就是添加、更新请求的项目可能要定义很多 Validator
但一般来说提交的数据结构是有规律的,或者说是有限的,所以,你可以定义多个通用的 Validator ,在使用的时候再灵活去组合,例如:
@Before( AaaValicator.class, BbbValidator.class, CccValidator.class)
public void action() {
...
}
还有一种办法是在 Validator 方法中多加些 if 分支,或建立一些通用的抽象,这样也可以让一个 Validator 满足多个 action
最后,有很多项目是读多写少的,例如 jfinal.com ,而一般只有写数据的 action 才需要 Validator。 所以一般情况用 Validator 还是可以接受的
2020-03-01 22:21
用拦截器可以实现各种定制的 validate 功能,博主的分享对于前后分离的项目十分友好
早期的 jfinal 版本对前后分离的 validate 支持不太好,所以高版本的 jfinal 提供了相关 API,在本站 jfinal.com 中的一个用法如下:
/**
* ajax 登录参数验证
*/
public class LoginValidator extends Validator {
protected void validate(Controller c) {
setShortCircuit(true);
setRet(Ret.fail()); // Ret.fail() 将设置 state : "fail" 值
validateRequired("userName", "msg", "邮箱不能为空");
validateEmail("userName", "msg", "邮箱格式不正确");
validateRequired("password", "msg", "密码不能为空");
validateCaptcha("captcha", "msg", "验证码不正确");
}
protected void handleError(Controller c) {
// getRet() 与 setRet(...) 配合使用
c.renderJson(getRet());
}
}
以上的核心在于 validate 中的 setRet(Ret.fail()) 以及 handleError 中的 c.renderJson(getRet()),这样处理以后的好处是对前后分离也一并支持了,controller 中的 renderJson(Ret) 与 validate 中的 c.renderJson(Ret) 实现了统一