打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Jfinal中的validator理解/详解

为了验证账号密码不为空,需要在控制器下的login()方法前添加验证器:

1 @Before(LoginValidator.class)2     public void login() {

而validator是实现了Interceptor(拦截器)接口。validator的用法如下:

 1 public class LoginValidator extends Validator { 2     @Override 3     protected void validate(Controller controller) { 4          5         //验证输入的账号和密码是否是空的 6         validateRequiredString("account", "account", "请输入账号"); 7         validateRequiredString("password", "password", "请输入密码"); 8     } 9     @Override10     protected void handleError(Controller controller) {11         String actionKey = getActionKey();12         if (actionKey.equals("/user/login")) {13             controller.renderJsp("/view/user/login.jsp");14         }15     }16 }

在上面的代码中,可以查看下面的源码可以看到,是先执行validate(validator.controller),然后执行handleError(validator.controller)

final public void intercept(Invocation invocation) {        Validator validator = null;        try {            validator = getClass().newInstance();        } catch (Exception e) {            throw new RuntimeException(e);        }                validator.controller = invocation.getController();        validator.invocation = invocation;                try {            validator.validate(validator.controller);        } catch (ValidateException e) {            // should not be throw, short circuit validate need this            LogKit.logNothing(e);        }                if (validator.invalid) {            validator.handleError(validator.controller);        } else {            invocation.invoke();        }    }

知道先后顺序后,看方法中的代码分别作了什么:

validateRequiredString("account", "account", "请输入账号"):
1 protected void validateRequiredString(String field, String errorKey, String errorMessage) {2         if (StrKit.isBlank(controller.getPara(field)))3             addError(errorKey, errorMessage);4     }

其中的isBlank(controller.getPara(field))只是判断得到的参数是否为空,而addError(errorKey, errorMessage):

1 protected void addError(String errorKey, String errorMessage) {2         invalid = true;3         controller.setAttr(errorKey, errorMessage);4         if (shortCircuit) {5             throw new ValidateException();6         }7     }

可以看到,他把validateRequiredString(String field, String errorKey, String errorMessage)中的错误key,和错误信息通过controller.setAttr()存储了起来,实际就是

存储到了request域中。

以上验证器中的第一个方法看完。

第二个方法中的代码:

protected void handleError(Controller controller) {        String actionKey = getActionKey();        if (actionKey.equals("/user/login")) {            controller.renderJsp("/view/user/login.jsp");        }    }

第一行和if判断actionkey是否来自登录页面,如果是,就将前面存储的信息发送到指定页面

总结:先判断填入的用户名和密码是否为空,如果为空,将信息存储到request域中,发送回登录页面。

 

                    
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JFinal : Validator分析
JFinal源码分析
Silverlight实例教程 - Validation数据验证DataAnnotation机制和调试技巧
C# 实现AOP 的几种常见方式
Controller层代码这么写,简洁又优雅
java.lang.NullPointerException at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服