00:00
流程分析完,我们可以来做这个添加操作了,看看怎么写添加回来,这个先停掉。添加啊,我在这块的话呢,写一个表单。上面写个表单S。Action ep3字段S。Text field name first name first name。
01:07
Afternoon。Afternoon,还有一个email。好了,最后一个的话呢,我们写一个按钮S3米O了,好了执行添加操作,那我首先的一个问题就是我得写一个方法。Z。
02:01
啊,我们看吧,我执行这个C方法的话,我们需要干什么呀,第一步获取请求。参数吧,第二步调用DAO的save方法吧,第三步通过什么呀?就是redirect action的方式响应结果给谁呀?然后这个结果的话呢,我们还是需要给那个PP是吧?这个流程好了,我需要获取请求参数,我怎么获取啊,是不还是在这个action里边添那些属性啊?好吧,我先写吧。
03:11
好了,对应的概赛的方法。Get DA的不要,1EMAIL的要,ID的要,First name last name request不要写吧?写完,然后参数就搞定了,来通过定义。对应属性的方式可以的啊,要save方法,我怎么办呢?
04:05
对,先把那些参数封装成一个employee对象吧,Employee等于new employee。我知道是没有ID的吧,都有好了方法do.c。然后是这个结果。去这个结果的话呢,到这个里边来,因为我有好几次啊,都需要到这个结果,那我干脆我给它改为这个再保存回来,于是这个返回值就叫size,也叫size哭了,看看效果好不好用。刷新来。
05:11
FFF,谷点一个。都加上了呀,好用的,删除也可以删没问题,来再加一个FFFFF股点com。好,没问题,代码写到这块啊,我们再来看我们这个action,如果说写那个查询跟删除的时候,这个action还是让我们满意的话,那写到添加这块的话,大家是不是也颇有微词了呀,为啥呀,你这玩意太多了吧,多到什么程度啊,多到我从这块开始,从这个呃,Employd开始,一直到对应的get方法结束,我是不是把整块这个音也写了一遍呀,对,已经有了,那你要是再这么整一遍的话,这个代码太多了。哎,大家有这样的,这个敏感性特别好,就是挑剔跟懒惰永远是使人进步的一个手段。
06:30
对呀,这我们就是要挑剔啊,这这不行啊,这太多了,那于是有没有好办法呢?我们能不能直接把那个请求参数赋给一个音抛对象呢?希望这样吧,再说一遍,我希望那个请求参数啊,直接付给那个音employ译对象吧,那我于是的话呢,我给他。
07:00
干掉,不要了。直接定一个employee。好了,于是的话呢,这个也不要了,要是能这么写的话,是不是挺爽啊,At in创it老能这么写的话,这是不是挺爽啊,那这么写的话,我们需要怎么做到呢?诶,往下看,这个时候我们就可以来用到我们这个叫model drive拦截器,首先这个问题的话呢,已经提出来了哈,把action跟model隔离开是非常有必要的,因为这个action说白了它就是一个controller吧,这里边不应该承载着太多对模型数据的这个嗯,引用啊R作为前端的企业应用程序,需要把action跟model清晰的隔离开,因为action并不代表模型数据,它提供的仅是显示服务,你不要把那些都给我,我我我宣传太多了。
08:11
那好了,这个时候的话呢,我们可以用到这个叫model drive拦截器,大家看我默认这个拦截器站啊,在这个S之前有一个model drive拦截器,那这个model拦截器他他能干什么呢?嗯,他说如果action实现了这个model drive接口的话。该拦截器会把model drive接口get model方法的返回值放到值站的站点,它会来干这件事,再说一遍,说呀,如果action实现了这个接口的话,那么抓兔的这个model drive拦截器将把实现这个接口之后那个get model那个返回值放到值站的站顶。那于是。
09:15
可以这么瞧着,Auto drive employee,写上方法。就要返回一个employee,等于new employee返回employee好了,这个时候我这个代码。就能过了,先看结果,然后的话呢,我们就来解释看源码它到底是如何运行的。刷新来。
10:05
FF,硅谷。加不加上了呀,删是不是可以删呢?诶可以的,实现了,然后再看这个这个代码是不是比以前省了好多呀,哎,这个代码我们比较满意好了,如何做到的,对我们来说做到这个步骤呢,很简单,第一个让我们这个action实现这个接口吧,然后呢。使那个方法就可以了。我们先看流程,再看需要注意的ctrl shift的T说有一个拦截器叫model driven。
11:04
好了,看怎么走的哈,Intercept方法这个代码呢,完全可以看得明白,先获取action,然后判断action是不是实现了这个接口,如果实现这个接口的话呢,进行一个强转是吧,获取直站。调用model drive的get model方法,如果这个值不是空的话,就把它放到直站的站顶是不是就完了呀,然后嘞,我这一步给它放到占顶了,我再赋值的时候,我是不是就把那个请求参数那个值赋给这个值占占顶的属性了,这个时候那个占领是谁了?是刚才get Mo方法返回值的那个对象,就那个employee好了,那于是的话呢,我们再来看一下这个。
12:09
是intercept最后一个再看啊也有intercept方法。那叫do intercept,我们别的我们就不管了哈,我们就直接在这块看一下,此时直站占领上是谁,就可以来第八个。添加。先停的是哪啊?先停的应该是摸drive拦截器吧,下一步先获取action employee action吧,是吧,然后action实现了,这个接口能进得来,然后呢,获取直站。
13:14
好了,看这个直站是谁呀?直站打开目前占顶的看root吧,是这个action吧,啊,是action,好了,那下一步调用get model对返回值是谁啊?是不是那个employee对象啊,就我们写过吧,在这个里边这个盖章的方法employee吧,OK,到这儿了,好了,这就是一创对象,然后把它放到了直站的站顶,看直站route。下一步占领的就是employee来好了,干了这件事,然后的话呢,我们到S进来,Para呢,我们就不管那么多了哈,我直接看ination有对值占的引用sta,看route占丙的是employee吧,于是那个值呢,就付给了这个employee吧,那我到X方法里面我就可以用了呀,这就是整个的运行流程。
14:29
回来这个运行流程呢,我们需要来写一下。一和叫什么实现action,实现model接口后的运行流程?
15:13
Eagle。哎,前提是我们的action已经实现这个接口了哈,那么我们对于我们来说,这个流程就是它先。会执行谁啊?包都drive因cept的。方法,第一个会来执行他的inter的方法。上。Want to drive。
16:03
的方法。这个方法的话呢,我们实际上我们都可以看明白,把这个方法直接复制过来。然后我直接在里面来写注释。第一步什么呀?获取action对象吧,比如说action对象是谁呀?这不就employ action对象啊,好,再说此时在action已经实现了model driveon,闭口吧,我们看一下这个声明拿过来。CTRLC回来不是实现了吗?好了,然后什么判断。
17:07
Action是否是model drive的实力吧,是不是,是吗,进来。第一步呢,强。是转换为煲粥。也行吧,张转,然后呢,获取直战吧,然后要用刀兜。Drive接口的at model方法,老师说D调用调用谁呀?调用employee action。
18:10
Get。猫刀,方法是这样吧,因为一棱压根实现的吗?按照这个方法C拿过来。实际上教的就是这个方法好了,然后呢。啊,Get model方法的返回值压入到直站的占顶吧,故事了吗?那我这块对我们来说压的是谁呀?实际入的是employee action的。
19:06
Employee成员。尽量吧,行了,到这块这个流程就可以了,就是我们的操作这个拦截器,第二个这个执行完了的话呢,还会来执行,第二执行ters intercept。露西还会干什么呢?的音乐。但方法它就会把请求参数的值覆盖占顶对象对应的属性,然后如果占点对象没有的话,然后再往下付吧,若占顶对象没有对应的属性,则查询直站中下一个对象对应的属性吧,以此类推,这就是我们目前运行的流程好了。
20:29
三有一个需要注意的地方,看我们的employee action,在在在在这看我这个写法啊,我是不是创建了一个employee,然后完了返回啊,那我这么写行吗?可以吗?直接个用employee,这样行不行,行不行,可不可以,我们先看结果,这个时候我们知道我是不是出现了一个新的employee,这个家伙也是确实是放到直量的占顶了吧,确实是放了吧,但是这个跟我这个乘以变量有关系吗?没关系吧,那你预知save的时候周瑕是不是空啊,所以说这样写。
21:32
不行,CTRLC来,需要注意的地方大家明白了的话呢,我们就直接说了哈B覆盖的model多方法盖的model方法不能提供以下实现。这样写不行,为啥呢,的确会。
22:00
返回一个employ对象到值站的点。对,没问题。转哈转。当前。Action。的employee同源变量,同源变量却是盗版,这么一个效果,你说什么?你说不给employee提供个set方法呀,那有啥关系吗?我的employee action,你说给他提供一个赛方法呀,Employee它有啥用吗?
23:09
有啥用吗?如果你要是像我现在这样写的话,你可以怎么用呢?不是不能用,你这么用。你得从这个里边先获取值,占占领占领对象的那个值,然后的话呢,再来获取这个。ID就是你要这么写的话也行,我们以这个天下为例吧,大家看一下啊,我out一个,来employee。是成员变量啊,加employee这个家是空,诶刚才我做的这些事跟这employee没关系吧,可以理解,好了,你还可以写一个说。看定下过去。
24:00
加到action action contact contact,点按顶对象什么方法来着。好了,这个是那个占领对象吧,找一个就知道了。嗯。后来哦。大家看这是空吧,好了,但我这个占点对象是不是有啊,哎,就是这么一个效,那站点对象的话呢,你可以重写一个兔子方法,看得更清楚。那你要这么用的话,是不是太麻烦了。不是你明明写一行代码你就可以可以不这么用吗。是吧,Employee大家看是FF f.com是吧?哎,是这样一个效果。
25:08
好,以上呢,就是我们说的这个,呃,Model drive,它的确是会给我们带来很大的好处,往下翻,Model drive,当用户触发这个action请求的时候,我们这个是废物请求哈,Model drive拦截器会调用employee action的get model方法,并把这个返回值放到直站的占顶,刚才已经看到了,接下来pro拦截器会把表单字段映射到直站占顶的各个属性啊,因为此时占顶已经是对我们刚刚压入的employee对象,所以说模型就会直接的填进去,说如果某个字段没有匹配的属性,它将尝试去找下一个对象对应的属性啊,这个我们在前面的话呢都有讲述,来看这样的一个图。
26:00
那最开始的时候的话呢,这这个占领的是谁呀。是这个employee action吧,当我们掉了这个model教学方法之后的话,在这个占领的是不是就是这个employee了,那么于是这个值自然就付给了这个employee。我这个例子呢,是想这么说,如果我employee action里边有一个email属性,而我这个employee里边。有name跟last name,而没有那个employee,那这个时候复是怎么付了first name last name是不是付给这个占领对象了呀?Email是不是付给这个employee action这个email了,能理解吧,不举例子了哈,测试一下的话呢,这个效果就像我们说的一样好到这块的话呢,我们就把这个model drive说清楚了,那我们这个代码改回来。怎么改呀,把这个改为他并不能这么写啊。
27:06
OK,那这个时候呢,然后这个打印也可以看,实际上这个时候你再打印的话怎么了,我这个employee就是这个成员变量。At class就这样写来,哈西hold跟和占领对象是不是一个对象啊?点哈西后再找一个。刷新走是吧,那整个这个流程的话呢,就顺了,哎,把这个代码发下去,大家把这个添加好好的看一看,下课休息。
我来说两句