关于Validator组件的若干问题,赶脚有点鸡肋,,,

在开发jfinal项目的时候,碰到一个问题,需要数据验证,但是有很多action需要数据验证,每个action的验证需求都是不同的。

如果用Validator组件的话,尽管实现了验证和逻辑解耦和,但是貌似每个action都得写个Validator类来进行验证,,又或者先写个通用的,然后写每个个性化的,以实现最大的复用。

So,就需要数据验证的action和Validator类的数量几乎是要相等的,那样。。。貌似。。。有点糟糕!!!

评论区

JFinal

2016-10-08 12:07

Validator 主要用于 POST 提交的表单请求,尤其是表单域多的请求。对于每一个字段的验证本质上就一行代码,如:validateInteger(...)

Validator 中可以获取 actionKey、controllerKey 等数据,所以可以将大量的验证写在同一个 Validator 中,然后用 actionKey 做一个统一的分发,不需要为每一个 action 写 Validator

再退一步,你可以利用 Validator 或 Interceptor 加载外部用于验证的配置文件,这就回退到了 SSH 时代

此外,假如是 GET 或者请求中的字段很少,直接在 action 中做个简单的判断 render 到特定的地方就好,不需要创建Validator

jfinal 的 Validator 有还有很多考虑,例如 API 引导式验证,你在敲入 validateString(...) 这类代码时如果出现手误 eclipse 会提示你,比 SSH 时代用 xml 配置验证要舒服很多,其它一些考虑在此就不赘述了

sruz

2016-10-08 17:45

@JFinal 嗯嗯,,感谢波哥哈。大概知道怎么玩了。

还有个小问题奥,就是你有没有考虑过那种纯json接口的数据验证,普通表单形式真的好久没写了,现在我大多都是ajax的方式。

我现在的方法是写个抽象类继承Validator,复写addError,在抽象类中定义了一个map来保存errorKey和errorMessage信息,handleError方法也直接在这个类中实现掉,因为只要统一的renderJson,返回一个code:400就好了

JFinal

2016-10-08 19:59

@xRhbN ajax 提交数据到后端,后端也是 key value 形式,验证方式丝毫不会变

sruz

2016-10-09 09:22

@JFinal 关键还是那个errorKey和errorMsg那两个东西,是setAttr的,,即使重写handleError,,但是还得重写带有errorKey和errorMsg的方法,,,毕竟感觉从ajax的方面来说没必要返回具体的错误信息,,,但是在编码的时候却必须写这两个,,,尽管可以用空字符代替,,但是强迫症诶

热门反馈

扫码入社