00:00
我们来说这个问题叫类型转换与复杂属性的配合使用。复杂属性啊,指的不是像。It型、string型、date型这样,而本身是一个引用类型,然后这个类型还有属性,这个我们称之为复杂属性。好了,我们通过代码进一步来说明。我首先呢,我在model里边来创建这样的两个类。第一个叫卖。两个属性,Private。The cost。好对应的盖赛方法。重写兔string,方便我们来做测试。
01:02
再写一个叫部门department。Private ID dpd name OK。我这个部门呢,作为那个猫头出现的。就是说我实际上录入的是这个部门,这个部门里边有一个复杂的属性叫manager。好了,写上对应的代赛的方法。方便测试,写一个兔TH。好。保存。这个department是我作为模型出现的,就是说我实际上操作的呀,是这个department这个ID呀,Dpd name啊,一般的属性啊。
02:05
Manager,一个复杂的属性,我们看我们如何来搞他。那这里边儿的话呢,实际上是有两个问题,第一个我如何在表单里边来,在这个表单的这个name里边来写这个manager,第二个。我这个麦那之里边有一个。Date类型的,那我在录入的时候的话,应该是一个字符串能够进行自动的转换吗?这是我们面临的两个问题啊,这里边我来写一下啊,两个问题。第一个问题,我们说department是模型。他是我们说的模型,就是我实际处理的。这。
03:00
我们这里边儿的话呢,实际上是实际录入的。Department。好了,这个时候的话呢,我这个DPT。Name可以直接写到。S。Field吧。属定中,没问题。中好了问题出来了,那我这个manager属性怎么处理呢?属性啊,Me属性。如何处理呢?哎,是一个问题。第二个问题。我们mdr中。有一个。Eight类型的。Boss属性。播。
04:02
可以完成自动的。类型转换吗?两个问题先看。第一个问题,第一个问题我在PPT上呢已经给出了说啊form标签的内幕属性可以被映射到一个属性的属性,我可以这么写,manner.name跟minor.birth。OK。八。抓兔。表单。标签name值可以。被。复为。属性的属性。N分之一就是我可以这样,Name等于M dr.name或者是name等于。
05:08
MD点。第一个问题啊,第二个问题,我们不是定义了一个。全局的类型转换器吗?那么这个类型转换器还可以正常工作好了,全局。的类型转换器。可以,正常。工作,所以说的话呢,这两个问题迎刃而解。看一下吧。我来写一个JSP。Complex。P。导入抓图标签。
06:03
T。好。As。Action。Yes。Back。B。好,S。Text field。Name ept内要录入一个部门吗?E pd。EEPTM。下下吧,然后的话呢,这个部门里边有一个manager m DR主径点。Name name下一个。
07:04
MD。也是mdr的,OK。S大米定这是我们的丹,这里边的话呢,就是我们所谓的这个叫属性的属性。一会需要改一下啊。映射。映射属性的属性,OK,下面我们来写这个。Action。这里边。
08:00
Take homeba property。Action。Play。Action the o。重写的方法。好了,我们继续来使用model。Model drive。我处理的是。Apartment。方法加上。Private。Department。Department。等于new。一。Apartment返回。这块的话呢,我们就写那个prepare拦截器了啊OK,这里边的话呢,我做一个打印,如果打印这个结果。
09:07
正常的话就OK了吗?来,在。需要配置一下。CTRLC导到t two的配置文件。Class。Result。Success PSP。Lucy。这个name值去看。跑这个页面。Run eyes。
10:08
走。好。部门啊。Abcde,随便写的哈,Name,硅谷。生日1990这格式是吧,十二十二。12哦。12,十二一杠。I can。这个结果呀。有一点问题。这个结果呢,并没有像我们想的那样,是吧,完整的打出来,我们看这个name是OK的,但这个birth没过来。为什么呀,往上翻一下。
11:03
有一个异常,他说呃,格式化异常,看一看这个异常是什么问题呢。这个异常呢,应该是格式化了之后有问题,我们看一下代码在43行这样有问题,那只能说传位这个值不对吧,是吧,我们43号打一个断点看一下。Debug。刷新走。停住了,我们来看一下这个Y6值是什么?八六诶。是那个字符串吧。OK。我们忘了是吧,我们写的那个字符串,我们写那个拍的那格式是什么格式啊。
12:01
不是那个格式,而是。这里边儿配置的格式看一眼。这个格式哈,把我把这个格式给搞错了,所以说这个先过吧。还会有异常。我把这个断点呢去除。好了再回来,这个没有断点了啊,我这个时候的话呢,我正确的写一个。这样写应该。我把这个格式搞错了啊,大米来看这个结果是OK的啊,ID的话呢,我们有输入我们看啊abcde后边的啊,It特硅谷啊,90年12月12号啊,00:12:12,这个转换是可以成功的。看到了吧,这里边儿呢,我们这两个问题都解决了。回顾一下。第一个。我们处理这个模型啊,是department,而这个模型里边有一个复杂的属性。
13:01
拍我一个。Manager。那这个时候我们如何来映射这个manager里边,如何来映射manager的属性呢?我们可以在name里边使用属性的属性。在这块配的你看。属性的属性。第一个问题,第二个问题,这个属性的属性也可以使用我们基于类型的这个类型转换器。当然你要配一个局部的话呢,也可以。好,我们看下一个问题,叫类型转换与集合配合使用。抓不允许在填充,呃,抓不允许填集合里边的对象,这常见于需要快速批量录入多个数据的情况。那我们来看一个这个表单。我们在讲这个文件上传下载的时候呢,我们写过类似的状态。
14:06
拿过来看一眼,这里面有一段JS代码。先跑起来。大家看诶,我可以添加N多个麦面,我还可以进行删除,我们在讲文件上传下载的时候讲过类似的表单,那个比这个还复杂是吧,当时我们怎么样,我们每一个都可以删,这个的话呢,我删的话只是删最底下这个。使用。Chrome打开。使用开发者工具。看一下我们新加的时候这个圆柱的镜框。
15:02
Form。Tablebody。以这个为例吧。打开大家看是不是managers一点啊。开这个。TD大家看manager0.name,对,刚好是符合我们o gal去引用那个集合元素的方式。好了,我希望批量录入多狗。那这里边的话呢,这个JS代码的话,我们就不写了啊,我们在前面已经写过这个代码,好批量录入多个诶我们就可以。在我们的action里面写一个对应的集合,那这个时候这个类型转换器呢,依然会正常的工作。这个表单呢,就写好了哈。我来写一个action。
16:04
Action。I can support。这里边呢,我就不再额外写model了,我直接把这个集合写在这个action里面。Election。Manager。MGX等于now。Q,方法?我做一个打印。Success,那我如果在打印的时候呢,我把这个集合能打出来,而且按照那个日期已经转换成功了,那我这个是不是就可以了呀。那后续往数据库录入这个代码的话呢,我们就不写了啊,我们只是一个呃,模拟的操作,看一看这个类型转换器跟集合在一起是不是可以协同工作,这是我们的目的。
17:09
还需要配置一下,找到struts的配置文件。Action。这个名字叫。T conversion two。Glass。Do。The result。Succeed。P。
18:00
按一下我们的带。Manager,哦,我还没写对应的盖的方法呢,加上。中心跑起来看看效果。写个AA。B。AC199012月12号。12分12秒。12:12:12。Big呢?变成。九一年简称九二年,搞一搞。来看。哎,这是我这个转换,转换几次啊,转换了三次对吧,然后打印我们看AA啊,后边是一个日期,BB后边是一个日期,CC后边是一个日期,这个转换就成功了,那这个呢,就是我们这个,嗯,类型转换器和集合配合使用。
19:11
怎么配合使用的呀?呃,把表单那个字符串转换为这个集合里边元素那个属性的类型,应该说这个类型转换器跟复杂对象跟集合之间有非常好的这个配合,这实际上在我们开发的时候呢,可以带来很大的便利。
我来说两句