Jfinal中的validator理解介绍
发布时间:2021-11-15 16:19:18 所属栏目:教程 来源:互联网
导读:为了验证账号密码不为空,需要在控制器下的login()方法前添加验证器: 1 @Before(LoginValidator.class) 2 public void login() { 而validator是实现了Interceptor(拦截器)接口。validator的用法如下: 1 public class LoginValidator extends 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 @Override 10 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域中,发送回登录页面。 (编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |