NutzCN Logo
问答 【@Validations]返回多种errorMsg该怎么做?
发布于 2313天前 作者 Zhouwt998 3787 次浏览 复制 上一个帖子 下一个帖子
标签:
@Validations(required = true,errorMsg = "请输入年龄",limit = {1,120},)//不为空时我想要,请输入正确年龄
    private Integer age;
32 回复

我看之前有相关帖子,说是用el,但我还是不明白怎么能多个错误信息

看了还是不太明白,您能指导一下吗

哪里没看懂

errorMsg 只能一个吧,不知道如何弄成多个。

public static boolean el(String fieldName, Object obj, String el, String errorMsg, Errors errors) {
        Context context = Lang.context();
        context.set("value", obj);
        Object val = El.eval(context, el);
        if (val == null) {
            return true;
        } else if (val instanceof Boolean) {
            return (Boolean)val;//true 和false 都直接返回了,就进入不了下面代码了
        } else {
            errors.add(fieldName, errorMsg);//除非不是布尔类型才能进入这里,但看代码注释el要返回布尔值,这是矛盾了吗?
            return false;
        }
    }
@Validations(el = "value > 0 ? ture : 998", errorMsg = "请输入年龄")//这样就可以,只有false不返回布尔值就正常

但还是不明白怎么定义多个错误信息

举个场景吧, 具体怎么样的多个错误信息

比如年龄字段,为空时,提示不能为空,输入999时,提示请输入正确年龄。可以达到这样吗

那用custom比较好了

那如何定义errors呢?

@Validations(custom ="checkAge",errorMsg = "错误信息")

注解里的errorMsg不也只能定义一个吗?

额, 有道理, 改改?

不太会改诶 大大-.- 这个插件什么时候才能真正整出来,我看还只是试用。连文档都没

待我改一下哦

好的

public static boolean el(String fieldName, Object obj, String el, String errorMsg, Errors errors) {
        Context context = Lang.context();
        context.set("value", obj);
        Object val = El.eval(context, el);
        if (val == null) {
            return true;
        } else if (val instanceof Boolean) {
            return (Boolean)val;//true 和false 都直接返回了,就进入不了下面代码了
        } else {
            errors.add(fieldName, errorMsg);//除非不是布尔类型才能进入这里,但看代码注释el要返回布尔值,这是矛盾了吗?
            return false;
        }
    }

这里如果是不完善的,也改一下哦。因为当false,必须返回非布尔类型,不然没有错误提示信息

看的是比较老的代码吧? 新版不是这样的

<dependency>
			<groupId>org.nutz</groupId>
			<artifactId>nutz-plugins-validation</artifactId>
			<version>1.r.65</version>
		</dependency>

这应该是最新版的吧

按最新的话, 1.r.67-SNAPSHOT了, 我提交了, 可以去码云或者github看看

已经看到,感谢您,nutz这个生态链真的好强大,支持


org.nutz
nutz-plugins-validation
1.r.67-SNAPSHOT

是我写错了吗,maven没有找到

嗯嗯, 在忙着搬服务器-_-

有空的话,您可以写个例子吗,我还是不知道咋写-.-

例如字段age, 写个 verifyAge方法, 然后custom="_" 就可以了

方法参数是 (String fieldName, String errorMsg, Errors errors)

请教一下您~
是这样写的吗?

@Validations(custom = "_", errorMsg = "请输入年龄")
    private Integer age;
public Boolean verifyAge(String fieldName, String errorMsg, Errors errors) {
        if (age == null) {
            errors.add(fieldName, errorMsg);
            return false;
        } else if (age <= 0 || age > 120) {
            errors.add(fieldName, "请输入正确年龄");
            return false;
        }
        return true;
    }

这里确定是3个参数吗?
但我看源码这里是需要四个参数才能去执行诶

Boolean ret = null;
                    if (paramCount == 1) {
                        find = true;
                        ret = (Boolean)md.invoke(obj);
                    } else {
                        if (paramCount != 4) { 之前3个参数,这里就没了
                            continue;
                        }

                        fm = FastClassFactory.get(md);
                        ret = (Boolean)fm.invoke(obj, new Object[]{fieldName, errorMsg, errors});
                    }

感谢您的耐心!

嗷嗷嗷,写错了,我的锅

嘿嘿,我说咋感觉不对劲。那您改一下

@zhouwt998 要不你clone代码,本地改改

还是您改吧,我不太会诶

还是有问题

@Validations(custom = "_" ,errorMsg = "请输入年龄")
public Boolean verifyAge(String fieldName, String errorMsg, Errors errors) {
        if (age == null) {
            errors.add(fieldName, errorMsg);
            return false;
        } else if (age <= 0 || age > 120) {
            errors.add(fieldName, "请输入正确年龄"); //这里添加的没用
            return false;
        }
        return true;
    }

这里的errorMsg,就算后面erros里添加其他错误,最终也只会返回errorMsg的错误信息

一概返回true, 应该就好了吧?

添加回复
请先登陆
回到顶部