关于自定义Validator验证方法问题

public class V2120Validator extends BaseValidator {
    private static final int bit_of_chinese = 2;
    @Override
    protected void validate(Controller c) {
        if("add".equals(c.getPara("type"))){
            validateLen("telNo", 11, "msg", "请输入正确的手机号!");
            validateId("telNo", "select * from sms_user where telno=", "msg", "电话号码已经存在!");
            validateLen("name", 20, "msg", "输入的姓名超出了长度限制!");
            validateLen("dept", 20, "msg", "输入的部门名称超出了长度限制!");
        }else {
            validateLen("telNo", 11, "msg", "请输入正确的手机号!");
            validateLen("name", 20, "msg", "输入的姓名超出了长度限制!");
            validateLen("dept", 20, "msg", "输入的部门名称超出了长度限制!");
        }


    }

    /**
     * 验证电话手机号码11位
     *
     * @param field
     * @param errorKey
     * @param errorMsg
     */
    protected void validateId(String field, String sql, String errorKey, String errorMsg) {
        try {
            String value = controller.getPara(field);
            String sqlStr = sql + "'" + value + "'";
            Record record = Db.findFirst(sqlStr);
            if (record != null) {
                addError(errorKey, errorMsg);
                return;
            }
        } catch (Exception e) {
            addError(errorKey, field + "验证失败!");
        }


    }

    protected void validateLen(String field, int len, String errorKey, String errorMsg) {
        try {
            String value = controller.getPara(field);
            if (value == null || value.trim().equals("")) {
            } else {
                int l = getStrLength(value);
                if (l > len) {
                    addError(errorKey, errorMsg);
                    return;
                }
            }
        } catch (Exception e) {
            addError(errorKey, field + "验证失败!");
        }
    }

    protected int getStrLength(String s) {
        if (s == null || s.trim().equals("")) {
            return 0;
        }
        s = s.trim();

        int l = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) > 255)
                l = l + bit_of_chinese;
            else
                l = l + 1;
        }
        return l;
    }
    @Override
    protected void handleError(Controller c) {
        c.renderJson();
    }
}

自己定义的验证方法,不能短路!请问如何实现短路,验证一个错误后,直接返回?

评论区

JFinal

2016-12-19 10:16

先调用一次 this.setShortCircuit(true) 即可极速打完收枪

FS心情

2016-12-19 10:24

@JFinal 老大,这个在哪里调用啊?

FS心情

2016-12-19 10:27

@JFinal addError 在这个方法前调用是么?

JFinal

2016-12-19 10:31

@FS心情 最好是在所有代码之前调用一次,例如你的
protected void validate(Controller c) 在第四行,那么第五行调用一次,总之,越早调用越好,因为你不是需要短路么?早调用早短路,就这么简单

JFinal

2016-12-19 10:32

理论上来说,你在哪调用都可以,只不过调用之前的所有代码不会被短路而已

FS心情

2016-12-19 13:46

@JFinal 谢谢老大,明白了

热门反馈

扫码入社