00:00
我们来看一下ru two内建的验证程序,本节课有三个目的。第一个目的。我们要看一下常见验证程序里边需要注意的点。第二个我们要来说一个短路验证,第三个我们要说一个非字段验证。那strong to一共是内建了15个验证程序,我们看这个文档就能看到回退有15个。那我在这个文档里边呢,给出了详细的描述和详细的使用方法,而且还有例子,我们找一个啊,比方说string valid打开。上边呢是描述这个呢是parameters,呃,可以设置的属性值,下边呢还有举例。所以说我们看这个文档,基本上每一个试一下的话呢,就能用起来。那我们来说一下这里边需要注意的一些点。
01:01
Required。这个是确保某个字段不是空值,不是闹。Record string有区别吧,不是空值,而且不是空白,这个空值跟空串不一样吧,在我表单提交的时候,即便是在我那个表单的那个字段里边,我什么也不填,按sum提过去之后是什么呀?是空串而不是闹啊,需要注意的地方,当然这块我们可以来设置这个参数。是不是去除前后空格?验证一个非空的字段值是不是有足够的长度,有这样的三个属性。Date验证给定的日期字段是不是在给定的范围内啊max。Email URL验证给定的字段是不是一个email或者是不是一个合法的URL reject验证给定的字段是不是和某个给定的正则表达式相匹配。
02:10
啊,有这样的三个属性,这个是指定表达式的,这个是是否忽略大小写啊,是不是去除前后空格。In。检查给定整数是不是在一个合法的范围内,这个的话呢,我们前面举的例子用的就是它。再来。Conversion。检查对给定action属性进行类型转换是不是会导致一个转换错误。哎,这个转换错误和我们前面那个类型转换有点雷同哈。我们来看一下这个conversion。我们就以我们前面这个验证为例,我现在的话呢,我把这个GSP啊。给整理一下,因为这里边儿我们打印了太多的这个验证消息哈。
03:01
我把这个注掉。CX。最后一个。这出了一个正确的值21。这个打印呢是没问题的,会退,就我输入一个A。走。怎么啦?两条消息吧,一条消息是不是似曾相识啊?没错,这就是一个转换错误。转换的时候打的。好了,我们现在呢,我们再把我们这个conversion加上。
04:01
Conversion转换错误。找到配置文件。Validation。来。转换这个怎么用呢。那个文档。回退。Worse。第一个。复制这部分是吧,就是C,因为这个I feel。这块的话呢,我已经写了。往前来。这哪里啊?这个里边啊。的F换一下。I was'。就是呃,类型转换出错啊一个标记。
05:02
我们看一下,如果我要是再加上这个这个验证器的话,那目前验证的效果是个什么样。不是这个是他。点。我发现什么呀。打了三条消息。看到了吧,这个是那个。转换验证器,这个是。Int验证器还有一个类型转换的时候出的错,很显然出了三个错,对我们而言有点多了。我们可能只希望看到一个,如果第一个不过的话,你就让我看第二个。是这样一个效果吧,那我们首先来说转换器的事儿,如果第一个转换器要是不过的话,就别来验证第二个转换器了,这个时候我可以来设置一个短路验证哦,一个。
06:00
这个值取为处就可以了,这叫短验证。设置短验证。什么意思啊,如果当当前验证没通过的话,将不再进行下边的验证。当前验证没有通过,则。不再进行。下面的。验证,哎,就是本验证。好了。再找一下看一看什么效果。点击。看底下这个是不是没有了呀,这就是短路验证记。我前面这个验证要是没通过的话,后边这个就不要找了。
07:01
PPT看一下。短路,短路验证valid元素或者是field valid元素都可以指定一个短路验证的属性,该属性指定该验证器是否是短路验证器,默认为false。对同一个字段内的多个验证器,如果一个短路验证器失败的话,后边的验证器将不会再继续校验。回来。那我们这里边儿的话呢,我们感觉还是不完美是吧,因为我这个类型转换没过来,你这个就。别出了好了,那我这个类型转换没过来,这个可不是验证器的事儿,这个是类型转换的事儿,那我如何能让类型转换要是没过的话,后边这个就不打印了。我们看一下这个类型转换验证器。
08:02
找到这个ru default。打开实际上有没有这个类型转换延长器啊,没有是吧,进行类型转换的是哪个延长器,是哪个拦截器。拦截器哈,进行类型转换的是这个拦截器,它只是进行类型转换,出错的话放哪呀。找到。Default sta,大家看。这个是进行类型转换,而出错的话呢,是这个version error拦截器,所以说我们应该来找这个conversion error。往回找converse a。在这儿呢?看一下他。Control c control。最后一个。这个是,嗯,转换出错的拦截器往下翻。
09:05
那这个方法的话呢,应该是在conversion error intercept里边再点它。找到intercept的方法大家看。这个特点是什么呀?这个特点就是我即便是有错误的话,他也往后执行。那么我们只要让。他要是类型转换出错的话,你就别往后走了,你就给我停住吧,是不是可以呀。类型转换要是出错的话,别往后走了,你给我停住,那这个时候的话呢,我们需要来修改这个源代码,因为在这个里边啊,并没有给我那样的属性。嗯。重写这样的一个类吧,首先啊,新建这样的一个包。修改源码这个事儿的话呢,我们已经干过好几次了哈,新建这样的一个包。然后把这个类复制过来。
10:01
首先创建这样的一个类,CTRLC过来。把这个粘过来。保存好了。找到我们这块,我说呀,如果你要是有错的话,就别往后走了,你就停住当这个错。当没有错的时候,当那个验证通过的时候,你再往后走。那怎么样看它是不是有错呢?诶。我们看一下哈,我可以来获取这个action。然后我们也是看这个action是否是。Validation aware接口这个类型,因为通过这个接口的话,我们能够看出来它有没有错。放到这儿。我们看他有有错。过来看if,如果va.has。
11:08
Field errors,如果要是有错的话,对不起,Return什么呀,Put回去吧,别往后走了,那或者是什么呢,或者是呃。还有一个错,或者是va.has X as,只要你有错的话,停住吧,别走了,OK,返回了一个input,那这个时候再看一下效果。走。怎么样,那个没有了吧,因为他到这个呃,类型转换出错的时候,就没往后就没没往后走,换句话说。这个验证啊,没执行。Com立刷default。
12:03
看个拦截基站。我现在这个代码呢,执行到这的时候停下了,他根本就没有到这个validation拦截器,进而没有执行那个验证。好了,这块的话呢,我们需要额外的再说一下,那为什么说我这块要是做一个返回的话,它就不会执行后边的拦截器了呢。我们在前边讲过stra to的这个运行流程。啊,我们知道。Action invocation是要一个一个去调那个拦截器的,然后的话呢,这个拦截器再往回调,这个拦截器往回调这个invoc点方法的时候才会怎么样啊。他才会。继续让这个X链往下走吧,Control shift t,我们找一下这个default action invocation。
13:03
看一下他。往下翻。In work方法在这呢,在这呢,你看你只有往回掉的时候,我才会让这个拦截器往下走,才会去掉下一个下一个拦截器,现在的话呢。调完之后。调完了这个拦截器之后,调完了我们这个沃森error拦截器之后,怎么了,我停住了,那于是这个代码就接着执行呗,这就是返回那个result code,然后怎么了?哎,执行了这个结果。看见吧,所以说这个时候停住了,哎,这是我们一种解决方案。好了,这里边的话呢,我们说了两个问题,记下笔记。
14:01
五。短路验证什么叫短路验证呢?说若一个字段,若对一个字段使用多个验证器,那。嗯,默认情况下。会执行所有的验证,哪怕第一个验证没过的话,第二个还会执行。若希望。啊,前面的验证器验证没有通过,后面的就不再验证的话,可以使用短路验证好了,写法呢。
15:05
像我的这个配置文件里边一样。我的配置文件呢。他。嗯。类似于这样的一个写法。Cant see not。这就是我们说的短路炎症六。又有一个问题说若类型转换失败。这个实际上是在类型转换那块啊,默认情况下。还会执行,后面的拦截器还会什么呀,还会进行。
16:06
验证后面的拦截器,看一眼,你看这个后边的是不是就是这个validation拦截器啊,所以说还会进行验证,那这个时候的话呢,给我们多带来不便,好了可以通过修改叫conversion I。S源代码的方式十。当类型转换失败时,不在执行。后续的。验证拦截器。而直接返回input的result,目前我们就是这么干的是吧,看一下这么写的。
17:10
写了这样的一行代码,拿过来。好了,这是我们这块需要注意的两个问题。急需PPT。Conversion验证器说完了,下面我们来看这个expression跟F的expression,它是用来验证给定字段是否满足某个OG表达式。好了,我们用这个expression验证,我们可以来搞一个什么呢?我们可以来搞一个这个非字段验证,就是这个密码跟确认密码必须一致,这样的一个效果。找到我们的。文档找到。Expression valid。
18:03
大家看到。这并不是一个字段验证是吧,他没有说我这个验证器作用于哪个,作用于哪一个字段。我们拷过来。CTRLC,这叫非字段验证。继续放到我们的这个配置文件里面。这是非字段验证。粘贴。Expression。这块的话呢,哎,我需要来指定一下这个表达式,表达式我们应该放在那个c data区域里边,因为这里边怎么可能会有特殊字符是吧,拿掉。C。Data,好了,我们希望的是password。
19:02
等于。Pass我的兔来。未来写一个消息。说password。It not equal two pass,我d two,那这个时候的话呢,我需要在页面上写这样的两个字段,一个是password,一个是password two。S pass,我pass了。Password,这个password。那对应的,我需要在action里边写上对应的字段。
20:01
打开。Private stra password private password to保存。对应的盖塞的方法。停。保存。如果没问题的话呢,它就会打印这个age。有一个错什么错啊。哦。Valis给了我们一个to是吧,放一下大家看什么呀?这里边儿的话呢。哦,等一下哈。他说,必须匹配的是。Field跟valid。必须做一个这样的匹配,那我现在我有了。
21:02
A valid多了一个东西是吧?这个往回串保存没问题了再走。这个错误消息如何显示,我们还得看一下,一会儿去看结果吧。验证没过,好了,我写个A,我写个B走。看一下这个错误怎么显示哈。这个时候的话呢,这个errors这个时候是什么问题啊,因为我这个age这个转换转换呢没过,刚才我不是修改了那个,呃,Conversion error intercept,我得让这个先过了,我才能够看到。QQ验证这个效果。所以说呢,回退一下这个改成一个。一这个时候这验证器没过AB再看。
22:05
好了,给了这样一个消息栈桥,大家看这个时候我们那个非字段验证给出了一个什么数啊,叫action errors,因为它并不是某一个字段的,它是action的问题,所以说显示的方式的话呢,用action errors那对应的。我应该使用action as那样的标签过来。打印一下action。Are?保存这种。刷新走大家看见了吧,哎,密码跟确认密码不一致。啊,这就是我们的非字段验证。过来。关于非验证。七。关于非字段验证。
23:03
首先什么是这个非字段验证呢?就不是针对于某一个字段的验证,这就叫非字段验证。我们举了一个例子,使用这个expression。拿过来,这是一个典型的肺子炎症。好了,我们还要说如何来显示非字段验证的一个错误消息呢?显示非字段验证的错误消息需要什么呀?使用S。Action。挨着标签。好了,使用方式呢,我们也来复制一下。
24:00
这种。因为它是一个action的错误,而不是某一个字段的错误。再看一下PPT。这是这个非做验证是吧。好。字段验证跟非字段验证,字段验证呢,这很容易理解是吧,这是字段优先,我是针对于某一个字段进行验证,它可以对。一个字段使用多个验证规则。非字验证是验证规则优先。那实际上绝大部分这个验证器啊,都支持两种规则,但个别验证只能够使用非字段验证,比方说刚才那个表达式验证。回顾一下刚才我们讲的三个点,第一个叫短路验证。第二个。类型转换如何在类型转换出错的时候,后续的验证不执行?哎,我们修改了cons error interceptor的源代码。
25:10
我们还举了一个非字段验证的这样的一个例子,同时我们说如何来显示非段验证的这个错误。
我来说两句