00:01
我们来说一下抓兔的类型转换。本章内容有这样的四部分,第一个类型转换的概述,第二个类型转换出错的时候如何处理。第三个自定义类型转换器,第四个类型转换与复杂对象的配合使用。大家大致上有一个印象。好了,我们首先的话呢,来看一下r two类型转换的概述,那一个HTML表单到一个action对象,这个类型的转换是从一个。字符串到非字符串,为什么呀,我们在一个表单上边。输入表单里边文本框里边的,包括我们勾选的,我一提交的话。应该是require get,或者是require get perter values,要么获取到的是string类型,要么获到的是string数组类型。所以说从表单提交到服务器的一定是一个字符串或者是一个字符串数组。
01:10
而我们在action里面,包括这个model drive里面,我们有可能在定义那个数据类型的时候,比方说是一个int型,那是一个float型,乃至是一个date型,哎,如何进行转换,这就是。呃,类型转换的意义所在。HTTP没有类型的概念,每一项表单输入的只能是一个字符串或者是字符串数组,在服务端必须把这个string类型转为特定的数据类型。那two里面这个数据转换是由pers拦截器帮我们完成的,它可以完成字符串跟基本数据类型之间的转换,注意哈,是字符串跟基本数据类型之间,那其他类型的话呢,需要我们自己来定义转换器。
02:02
那我们前边的话呢,已经写过类似代码了是吧。比方说哎,你有一个edge,那我在这个文本框里边,我输入一个12,那我到服务端,哎,我定义成一个int型,这个是可以自动完成这个转换的,前面我们只是看见了,呃,完成完成这个转换的话很流畅,但是。提一个问题,如果转换失败的话,怎么样?如果要转换失败的话,这个时候有两种情况,第一种情况,如果这个action没有实现validation和VR接口的话。那么。在遇到转换的时候呢,还会继续来调action方法,就好像什么都没发生过一样,就你没有察觉。第二种情况,如果action实现了这个va和V接口的话。Stress在遇到这个错误的时候就不会去调X方法了,而是。
03:01
去找一个name等于input result,然后把这个控制权交给name等于input这个result。如果要是没有这个input的时候,对应那个result stress将会抛出一个异常。就是处理失败的时候这样的,呃,两种处理方式,OK,我们来试一试。首先呢,新创建一个抓图的工程。抓。杠六。那搭建这个工程呢,我就把前面这个。加包复制过来就可以了。See。今天。配置文件,这个filter直接复制。
04:07
Contractive。然后是自身的配置文件。Copy。三天我把这个呢。给他听一下。OK,这就是一个空的48度的工程。我们来进行一个测试,首先我来写一个index.jsp。导入抓图的标签。
05:02
S。Form。Action。Test conversion。S。Text field name,写个age就可以了,好了。VIP page。S。Summit OK啊,我需要去写一个对应的action,然后的话呢,我才能看到啊类型转换的这个效果。新建一个类。Conver then。Action。二大点股点抓兔点APP。Beach。
06:01
T型的set方法。方法。Public student execute。我返回一个。Success。把一打一下。OK。配置一下。Action。C。Glass。You c。方法呢,是用默认的,我直接配一个。Accept。保存。过来。
07:02
他的这个是。Success配置就可以了。OK,有一个。好了,我来写一个合法的12 12可以为正常打印,然后这个页面呢,有了。来,我写一个不能够转换的AA到这。看看怎么了?在控制台呢,没有任何异常被打印。然后呢,这个H0啊,显示H0 H的默认值是不是零啊,哎,就好像什么都没发生过一样。这就是我们是感知不到这个类型转换储存,这就是我们说的第一种情况说,如果action没有实现这个validation v接口的话,那么stresss在遇到类型转换错误的时候仍会去掉action方法,就好像神马都没发生过一样。
08:14
那这种情况的话呢,我们大部分的时候,我们不希望这样是吧,我们希望有串的时候,我看见有异常抛出有这个页面,那给我提示,这个时候的话,我好进行处理,所以说很多时候呢,我们action需要实现这个validation aware接口。CTRLC,看一下这个接口,CTRLCTCTRLV走。Validation和va接口,这里边的话呢,有好多方法。那这些方法。我们要不要一个一个实现呢?我们前面讲action support的时候,我们知道action support实现这个接口,所以说我们可以通过继承action support来实现这个action of。
09:01
回来我通过继承action support的方式来实现这个接口,Action support里边啊,已经提供了各个方法的实现,我直接用就可以了,好了。于是这个时候啊,我只是实现这样一个接口哈,就是说我。我只是呃,继承了这样的一个类哈,但是呢,呃,我通过这样的方式。间接的实现了那个action接口。那我们看这个时候这个结果是不是会不同走。回退注意我点AA注意看。怎么了,这个时候的话呢,给我抛出了一个404说对于这个action呢,没有定义一个result input这样的一个结果。就是说这个时候出错的话,他要去找name,等于input那个result。
10:04
我们给他来配置一下。写一个。Name等于input,这个input当然是。我输入那个页面,正常情况下的话都这样配置,我输入这个页面不是index吗?表单在这个里边啊。这种。回退找一个注意看。哎,这个时候的话呢,回来,而且它还给我显示了一个错误消息,说听文的意思是A的这个字段的值。不合法。好了,这是我们说的,嗯,类型转换失败的第二种情况,如果action实际上这个接口的话,这个时候。他会去找name等于input这个result,然后呢转到那个页面。你在那个页面上还会自动的给我打印出消息来。
11:01
好了,说自动的打印出消息来,为什么会自动打印呢?因为我们用的这个主题是。XHTML是吧?啊,那这个主题默认不是XHTML吗?哎,这里面K有几个问题需要我们来说,第一个问题把这块来写一下啊。来几个问题问题。如何覆盖默认的?默认的错误消息。或者说给了我这样一个消息,这个消息的话呢,我有这个消息不好是吧,我想给他覆盖掉啊如何覆盖。第二个问题。问题二。如果。是。Simple主题。还会自动。
12:02
显示。错误消息吗?啊,如果不会显示,如果不会显示那。怎么办是吧,怎么办?哎,这是我们目前遇到的两个问题。第一个问题。YYY哈,第一个问题,如何覆盖这个错误消息?拉兔提供了覆盖购物、教学的方式。PPT哈。首先我们要认识一个拦截器叫convers error,这个拦截器呢,负责添加与类型转换有关的错误消息,那前提是action需要实现这个action v接口我们已经实现了,而且呢,它还能够保存各个请求参数的原始值,就是说哎,我点了一个提交之后的话,你看那个表单是可以回显的,这就是。
13:03
保存请求参数原始值,注意这个啊,Conversion error,我们在后边讲验证的时候还需要来看它的源码。后边我们再说。好了,那若字段标签使用不是simple主题的话,则非法字段将导致有如下格式的一个错误消息。被打印出来叫invalid field value for field field name,这就我们刚才看到这个,那把这个field name改成age就是。好,下面看如何来。覆盖这个错误消息呢,哎,通过这样的方式。Lucy。Index。对,看。角一啊,我们在对应action里边新建一个文件,对文件叫什么?Action liming properties。
14:01
这个class name action class name就是我们那个action的名,然后呢,我们在这个里边可以建入一个电值,对来。定义那个错误消息是什么?引I里的点。Field value。Field。Name等于。就是大家需要注意的是呢,我在这个里边怎么样,我只有说这个字段的名,我是不是没说是哪个action的呀,为什么不需要说呀,因为我本身这个文件名已经可以定位到那个action了,OK,我来试一下。我们找到。APP这个下边吗,是吧。FR。布置。找一个。定你一个。Proper。
15:00
Proper。Invalid。打。Y6.h等于,哎,我们说。错误的年龄不止。好了,再看一下这个错误消息。大家看到了吧,哎,这个时候显示呢,就是我自定义的消息。这样就可以。第一个问题我们就解决了。啊,两个步骤。第二个问题。如果是simple主题的话,还会自动显示错误消息吗?我们一测试就知道了。我拿到这个index的JSP,我加上一个主题是simple。
16:00
Temple。哦,如果要这样指定的话呢,这个勒不就自己写了哈,写个A,然后呢,写个。第再写个点好找一个。直接导大家看,这不是不不显示了啊,这个时候需要我们自己。通过标签的方式来显示这个错误消息,怎么显示呢?这是我们要解决的下一个问题。好,邮箱怎么显示啊?这个时候这个错误消息呢,应该在直站里边能。看得到错误消息应该在直站里边能看得到,要么是对象站,要么是map站,所以说呢,我可以在这个上面加上一个SN bug,看一下目前值站的状态里面有没有这样的一个属性,是我那个错误消息。
17:02
找一个。点summit OK debug打开,大家看到一个什么呀?我这个conversion是不是有一个errorrows属性,还有一个few的error属性啊,叫什么字段的错误。然后是H等于一个什么什么是吧,所以说啊,我可以利用OG的方式把这个错误消息显示出来。那这个field errors应该是当前action的一个属性,Age等于什么?这应该是什么呀?应该是一个。Map吧,见是字段名直是一个什么呀,直是一个。拿这个一扩,貌似是一个字符串数组哈。嗯,我们可以看一下这个f as到底是什么类型的,怎么看。点到icon里边来。打开这里面没有,那一定是在我的action support里面。OK,我们想看一个。
18:03
That field errors。这儿呢?看这个键呢,是一个string形值,确实是一个string形的list,哎,我可以利用OG的方式来显示这个错误消息,怎么显示啊。我先写哈。怎么显示啊说。实战占领对象有一个field errors。属性,这个属性有一个配置的一个线,我要取它的第一个值就可以了吗。集合吗?第一个值看效果。刷新再走。哎哟。没有显示上好看。Field errors。
19:02
这个亦需要大写。回来。保存再看。可以显示没问题,错误的年龄格式,所以说我们第一种显示方式呢,我们是在指战里边看出来啊,通过bug。标签。若不错。转换。突破则在。直战。淡定。对象则在直站的action对象中哈。Action。对象中前提呢?Action需要实现那个validation aware接口。实现啦。Validation。
20:01
Aware。Pickle。哎,得在直站的这个对象中有一个叫。Fields属性。啊,属性。该属性的类型为我们看源码刚才这一个map电视string值是list,后边还是string。好吧,说变。直电是什么呀?电直。电视。字段的名字。自霸地属敬明。属性名值呢?值就是那个购物消息组成的例子。错误消息。组成的,所以可以使用EL或OG的。
21:06
方式。哎,显示错误消息有没显示啊。这样写。Build errors r map吗?然后我取零就可以了啊,我们这样显示。也可以使用。还可以使用一个什么呀,S。Fill is。标签来显示当中,这标签显示的话呢,我们需要指定那个。Few name来定位显示哪一个字段的错误啊,可以通过。Field name。
22:00
属性啊定位。显示吧。指定。字段的错误。是一个,我再写一个。叫S。Field error。As feel。然后的话呢,Field name等于。应该也是可以的,我带一个标记来看一下。哦。样。可以显示吧。啊,显示上了,那这个是前面那个小标记,那显示之后啊。它是这么一个格式,这个格式跟我们整个这个排版有点格格不入。啊,这个格式的问题的话呢,我们一会儿再说,我们先把。这个先看一下,哎,我可以通过这样的两种方式来显示这个,嗯,错误信息看PPT。
23:13
如果是simple主题的话,我们可以通过as error field name写错了啊。Field。M等于什么来显示消息?实际上这个错误消息是在一个什么里边啊,在一个。我说看这一个。Ul lib里边。显示一下,看在这个里边。往下翻,前面是什么?S debug在这里边大家看。Ul。Ul的话倒是有一个class。然后是Li span Li在这个里边,那么因为它有这样的一个class啊,你可以用CSS把这个样式变得漂亮一点。
24:03
但是这里边儿我们不爽的是。这里边这个ul跟Li啊,对我们而言实际上还是一个障碍,因为我现在是一个simple主题,我不希望你带什么,呃,ULLX版你就正儿八经呢,给我放在这个后边给我显示得了啊,像这个一样,而不是又撤出来一块,我不希望这样好了,如何解决这个问题,这是我们要说的。下一个问题三。问题三吧。说落是。Simple主题切使用。这个来显示出消息。啊。来显示错误。
25:01
消息,则该消息。带一个什么呀,带一个ul Li半种。这实际上并不利于我们排版。好了,那如何。去除这个ul Li怎么办呢?我们说的下一个话题如何去除啊?大家想是吧,啊,既然它能是在一个ULLS里面,这说明在程序的某一个位置,他这么写了。或者是有对应的模板,我只要把那个ULLX去掉不就可以了吗?好了,Simple主题,我们找一下。过来,我们找到two的。核心包。
26:00
往下翻,大家看是不是有很多模板啊?Template找到simple。再找到。Field啊。Error打开大家看这里边的话,我们就定义了这个field error的显示样式是不是有。Li啊,是不是有?Span啊,哎,我的目标就是把这个u Li Li跟span去掉就可以了。那么我们看如何进行去除。已经找到了。哈说在。哪个下边呢,这个下面。这个下面的。这个文件。Field error。
27:00
定义了。S音主题一下吧。主题下这个S。啊。Error标签。显示错误消息的样式。杨思慧,俺不认识啊。但是哎,你。样式。我们的目标是。修改这个配置文件。对。修改该。配置文件即可,OK,如何修改呢?这个我们在前面改那个抓图源码的时候呢,我们改过这个问题,怎么样在src下新建。
28:00
一个包。然后呢,新建一个文件。然后怎么样把原。生。这个中的内容复制到。新建的。这个中,然后剔除。什么呀,Ul啊,Li span。部分一口,哎,这样改好吧。开始办吧。首先建这样的一个包,CTRLCC下。就是说这个项目接完之后啊,他一定是优先使用本地的。
29:00
也好在建这样的一个文件。也建好把这个出A出C,把这个出V粘贴。打开。我们去看。这个呃,Ul跟Li这个文件呢,我们不用看太懂是吧,我们只需要能看到哪个是u Li,哪个是Li就可以了,注意uli,大家看这个是不是没有这个结束啊,结束在。呃,48行,这些都是属性,干掉不要。然后呢,Li ul,这个结束在哪呢?结束在这呢,看到了吧,结束掉。Li,干掉。LS结束干掉,后边还有。Ul,这。
30:00
结束。OS。O版。保存。可以了。移动服务器。再巧。走。大家看就是跑后边了呀,哎,这样的话呢,我就把这个问题解决掉了。好了,以上的话呢,就是我们讲这个类型转换的第一部分内容。啊,如果。类型转换出错的话,这个错误消息如何进行显示和定制,具体的这个笔记呢,在这个index JSP里面,大家课后呢可以来参看一下。
我来说两句