00:00
下边呢,我们实际来完成这个修改操作,首先还是确定开发目标。我们来看一下实际的运行效果。把这个程序跑起来。点这个list or employee。好的,我们来改第一个意义。I。我加一个A。可以放心使用对吧。A改成21,注意改成财务部走,我们看见修改a a21号财务部这些修改是成功的,同时我们注意到这个创建时间是不是没有改呀,诶这是一个特别重要的细节。好,下面的话呢,我们来说细节,首先他ul请求应该是DP。
01:08
带一个ID method应该是什么呀?修改应该是一个put请求对吧。好了,然后的话呢,我们来看我们的DA层。我这个添加跟修改实际上有很多类似的地方,我们看我们前面写这个添加是怎么写的,直接来看service添加的时候呢,我实际上我是调了一个方法,这个方法叫save and flash,这个方法既可以进行添加,还可以进行更新,所以说do层继续继继续使用这个方法就可以了。下面我们再来看。
02:02
那在我们添加的时候的话呢,我们需要设置一个属性叫create time,在修改的时候不需要设置这个属性。不需要设置这个属性,第一个字母小写。然后呢,我们需要判定一下什么时候是添加什么是什么时候是修改呢。判定、添加和修改的标准。是什么呀?传入的bin的ID是否为空?如果ID是空的话,就是一个添加,如果ID不是空的话,就是一个修改,对吧?
03:00
好,再往上,到了我们的controller。到这个controller的话,最开始我们需要能够应答这个URL,以及这个method,这个没什么说的。下边需要注意,呃,我是直接调用。Service的方法进行更新吗?是这样吗?如果直接这样的话,将会导致。这个属性被置为空。大家记得这个事吧,我们来看底下这个图,完成一个修改。如果我们真的直接去调service那个方法的话,就会导致time,即表单没有传入的那个字段被置为空。
04:04
我们的目标呢,实际上是修改部分属性,还有一部分属性使用以前的纸而已。而这个部分属性就是没改这个属性啊,表单里边并没有传对应的隐藏域,而我们要是直接去调我们那个方法的话,它将导致在handle里边我们会创建一个新的对象,然后呢,它只给部分属性赋值,就是表单有的那些字段赋值,而没有这个会置为空,你这样一更新的话,就导致着会把表单没有传入那个字段置为空,这是不应该的。怎么做呢?我们先需要从数据库里边获取一下,那它需要怎么办呢?这个实际上不就是那个model attribute注解标记那个方法吗?大家记得吧,如果不清楚的话,看一下以前spring mvc的视频,这两个图呢,实际上就是从我们C那个视频里边给它截取出来的,所以说这样直接做是不可以的。
05:11
这应该放在我们的下一步。第一步。新建。At model attribute注解修饰的方法。然后呢,在其中。利用ID获取。对应的并并把。该B放入到map中,键。为employee类名第一个字母小写什么意思呢?我们以这个添加这个为例哈,就是说。
06:08
我这个实际上。我这个bin怎么获取啊,我会先上map里边去找类名第一个字母小写的那个bin,如果没有的话,我再通过反射创建一个新的B,对吧,所以说这块有这样的一个操作。好了,实际上这个中间还有一个操作,这个操作我们一会儿说现在的话呢,还看不到。下面呢,我们需要重定向到到哪呀。跟添加成功是一样的。到看我们的handler。从定向到这儿。Employees。
07:01
好的,再说我们的JSP页面。因为我是一个修改操作,所以说ID和下划线method干啥用的,把这个post请求转为put请求的加入到隐藏语种。好了,以上的话呢,就是这个基本步骤,这里面我空了一个,这个的话呢,一会儿说。我们来看吧,DA层不需要改,现在我们先来改我们的service service在。这判断一下,如果employee.get ID等于空的话,这个时候我来设置我的time。Handler。再写一个吧,因为这个mapping。
08:00
嗯,这个脉片不一样,其实我这个Y6值怎么了,是不是一个死存数组啊,我们可以写在一起,但是如果ul不一样的话,我们更建议啊,再写成一个独立的方法。我把这个CTRLCCTRLV。这个呢叫update。Y6值是不一样的。这样写,这个改成。Put。这块写的方式实际上是一样的。下面再来看我的。Input,诶这里面呢,我需要加入两个隐藏域,同样是在ID不是空的时候,所以说我把我干脆把这个给它复制过来。嗯。现在我来写S,没有S哈。Form。
09:03
Former hidden。ID,这个是用来存那个ID的。再来一个。Input type hidden_method put这块的话呢,同学可能或多或少会有一点。小问题。问,你在哪呀?问题在。我如果啊,问题在这儿哈,问题这这个一会儿再说,有点溜号,问题在这。问题在,诶,你为什么有的隐藏运用input,有的隐藏于用form hidden这个标准是什么呢?这个标准应该是这样的。如果我们。
10:00
用的这个隐藏域跟我们这个model attribute这个B的属性相关,或者说这个隐藏域需要回显的话,我们就用form hidden就是回显哈,回显同时还需要提交,然后它呢,跟谁啊,它跟我这里边这个属性相关,我用它,而有些隐藏域不需要提交,比方说这个不需要提交。没有name属性吗?还有一些隐藏域呢,这个隐藏域的这个名字跟我这个B的属性一点关系也没有,这个时候的话呢,我们就来用这个一般的input hidden就可以了,还有一个细,还有一个细节需要注意,这个UR是不是也不一样啊,所以说这块我还需要来加上一个判断,把这个复制一份吧。CTRLCCTRLV。上面写一下cet。Value URL。
11:08
这个值呢,可以是它。那如果这个ID值不是空的话,这个时候这个值就得被修改了,是什么呀,加上一个它高。employee.id这个时候这块我写成。URL就可以了是吧,好,现在的话呢,运行一下,看看这个修改能不能成功。把这个起来。走起。走。
12:03
来点。List all employees。改了个AA,点右键原文件看一下什么呀。看一下我这个时候form这块实际上已经改了,而且这块也有隐藏语,好了,我们先写个它AA可用的。改回来。没问题,好A加个加个A改成31号,注意我没有去改什么呀,我没有去改这个部门吧,我点。提交。提交之后发现这个改了,这个改了correct time是不是没有了呀,因为我到目前还没有去写那个model追的方法吧,所以说我把这个方法给它加上。
13:00
猫都attribute过来。Public void get model attribute,那这个方法呢,实际上是在每个目标方法执行之前它都会执行,那我希望你有选择性的执行,什么时候啊,你有ID的时候再执行吧,Value等于ID。Require等于false类型的ID map。String object map。如果ID不是空的话,说明你是什么呀?说明你是修改,我就来获取一个新的employee。等于employee service.get ID同时放在map里边,这个名字呢?
14:09
是类名第一个字母小写。你的一字小写好了。保存再来。那我先前这个时间呢。我得给他改回来。要不这样吧,我们以这个BB来说事,好吧,BB。注意加一个B可用。B16号注意我没有修改部门提交。BBBB9月16。没问题吧,这样这个修改就成功了。大家可能会说,老师你怎么不改部门啊,我现在的话呢,我来改一下部门,大家看一看会有什么问题没有。
15:02
部门。改一下,走出了一个异常,他说什么呀?他说我把这个ID由二改成四了。诶,大家思考一下,为什么我改这个部门就不行呢?应该说我这个修改呀,完成了一大半,但是我不能够修改这个关联对象,一改的话,他报了一个错,他说我去改那个关联对象的ID了,大家思考一下为什么。我们下节课讲。
我来说两句