00:01
那前面呢,我们做了添加购物车,那接下来我们再来细化一下这个购物车的添加逻辑,首先在这一块,我们这个添加购物车会发送一个这个请求,告诉我们商品的ID和件数,当然我们这块呢,稍微有一个问题,如果我无限次刷新这个请求,相当于给购物车里边就添加了很多的商品,那这个呢,我们就类似于重复提交的问题,而如果我们来参照京东,假如京东呢,这有一个商品,好,我们来点一个加入购物车,那加入购物车完成以后,我们再来是无限刷新,我们发现购物车里边的数量是不变的,比如我们这一块,我们以荣耀九叉为例,现在呢是四个,那我们无论怎么刷新我们这个总商品件数,它都是不变的,所以这一块想要解决怎么办呢?其实也非常简单,我们来到我们的这个controller,我们来看一下我们购物车的controller,我们添加了购物车会发这个请求,完了以后呢,我们会将购物车的详细信息放到success页面。
01:01
啊,这样我们success页面展示,只要我们刷新我们这一块呢,就还会填进去们success页面呢,总是会展示我们现在最新的数据,我们现在呢,只需要改变一下逻辑,我们每次刷新的这个and to cut,我们呢,让他在刷新的时候,每次只要购物车添加成功,不应该是直接展示我们成功页面,我们可以让它重定向的成功页面,这样的话,我们添加成功以后,我们跳到了一个新页,这样我们只刷新页面,而不给里边再来添加数据就行了,包括京东我们也是这么做的,我们可以看一下我们这个效果,在京东这里边呢,有一个添加购物车,这个购物车里边呢,大家注意下边,我们来选中它的时候,下边其实还有一个链接,这才是我们添加购物车的链接,叫get action PID指的是商品ID,还有我们count,我们添加一份,而我们这个添加成功以后呢,跳到的是and to cut htm2这个页面。所以呢,京东是利用两。
02:01
个页面来做,那我们也可以利用这个事情,包括如果我们把京东的这个加入购物车链接我复制来,我们把这个链接复制来,我们来无限次操作多个,我们来看会不会变化,好这个链接我来操作一个,那购物车里边六件商品,那我再来操作一个七件商品来,我再来操作一个八戒商品,所以我们如果把这个加入购物车的链接复制来,我发现呢,其实也是重复的,当为了我们的这个页面效果们既然已经在这儿展示成功了,我们再刷新就不应该再往上添加,所以我们把这儿呢改变成两个逻辑,我们这一块呢,购物车添加成功,那添加成功以后呢,我们让他重定向的success页,而success页面最终还要取出我们刚才添加了哪个内容,所以呢,我们接下来就直接来写一个请求,Public string,这个请求呢,我们就叫and to cut success to cut success配置我们添加成功的这个页面。
03:01
我们直接return,我们跳到success页,跳到这个success页,我们来写一个get map,诶这是一个成功的这个映射来,我们就叫and to cut,好点一个HTML,我们这个呢是success HTML,那现在呢,我们就让它重定向,那只要添加成功了,重定向到我们这个页面redirect。那们重定向的杠杠就代表当前项目,重定向的当前项目的我们这个页面,这个页面呢,相当于还是处理一个请求来到success页,但是我们要把上次添加成功的这个商品数据,我们呢要拿过来再来展示我们这个重定向携带数据,大家可以用我们之前说的redire attribute,但那种呢,像页面只能刷新一次,它模拟给session里边放一次,再刷新就没有了,所以为了方便,期间我们应该是这样,重定向回页面以后,我们应该把刚才添加的这个商品,然后呢再带上就行了,然后呢,重定向重定向到成功页面,然后呢,我们让他把这个刚才添加的这个商品,购物车里边到底有几个,再查一次,再次查一下购物车,那再次查询购物车数据即可,所以呢,我们可以让它重定向的时候,携带上我们的商品ID来写一个。
04:26
棒类型的SQ ID at一个request per,好,那我们带一个SQID,我们现在呢重定向我们想带一个参数,我们可把这这个参数放到model里边也没什么问题,如果我们给model里边放在数据,如果是转发就放在请求域中,如果是重定向,它也会自己给我们拼到这个地址后边。好,所以呢,我们就把。Sqidd我们还是放到这个model里边,我们让它重定向回到我们的这个success页,然后我们success页拿到它以后再来查一遍就行了。那怎么查呢?我们希望购物车诶就有一个方法,就叫get cut item获取某一个指定的购物项,然后呢,我们把这个购物项的ID传给你,你给我最终得到我们购物项卡特item来到页面呢,我们页面会来展示item,所以我们还给model中把这个item继续一放,我们就来写一个model,好,这个model呢,我们接下来只需要在model点一个and attribute,我们给页面呢放的K叫item,然后我们给页面放这个购物车查出来的数据不再添加完后放,添加完后呢,让他重定向到页面,重定向到页面以后呢,再查一遍,查一遍以后呢,再让他来进行展示,这样我们就可以来解决重复提交的问题,好,我们希望呢?
05:53
就有这么一个方法来创建出这个方法,那这个方法的作用就是呢,获取购物车里边的某个购物项,获取购物车中某个购物项,而上边呢,这个是将某个商品添加到购物车,这是将商品。
06:12
商品添加到我们的购物车,好,那么这个购物项的获取,来我们来直接添加一个实现方法,我们还是一样,我们先来获取我们的购物车操作,诶,我们把这个方法呢,抽取过来,根据我们现在登录状态得到我们要操作哪个购物车,然后呢,我们接下来把这个购物车操作拿来,我们获取一个购物项就行了,那想要获取我们得到的整个购物车,我们可以来看一下我们red里边的数据,那我们得到的整个购物车呢,它是一个哈希结构,所以我们想要获取呢,只需要get获取到它哈希结构的某一项数据就行了,所以我们接下来在这就来进行get,点一个get,我们接下来要获取谁?那就是当前商品的ID,按照它作为KSQID作为K点,一个图丝串好,我们来获取,获取到的呢是一个购物项的string,我们把这个string来转过来,然后呢,我们要把它转为我们真正的购物项。所以。
07:13
我们用Js.pass object,我们要转的这个字符串,那就是我们获取来的这个string,我们把这个string呢,我们来转成我们要用的car at,好,这是我们这个购物项,转过来以后,我们把它进行返回,那这样呢,我们这个购物车的页面跳转办法,这是跳到我们购物车添加成功页,这是跳转到成功页,我们一添加成功以后,我们就跳转到这一页了,我们总是刷新的话,现在只是这一页呢,去查一下数据再来刷新它呢,不会再每次给购物车来做添加操作,好我们现在呢,把购物车服务再来重启一下们来看一下我们现在的效果,我们还是以我们这一块呢为例,我们现在来添加七号我们这个商品,我就我们现在的登录状态,我们先来确认一下,来刷新好,那们现在呢是登录状态,那登录上状态呢,我们之前的这个华为已经23个了,我们再给购物车里边来添。
08:13
一款商品,我们现在来点商城,好,我们来到商城里边,我们来随便添上一个,比如我们来填这个,这是我们的四号商品,来点一个加入购物车,而且如果我们来点击加入购物车,我发现这一块呢,提示说我们SQID它是在我们这个参数里边不存在,那接下来来到我们的这个服务,我们这个服务呢,是将SQID如果我们添加成功,我们将SQID放到model里边算了,那重定向携带数据我们也就不用model了,我们用redirect attributes,好,那还是用它,然后呢,这个重定向携带数据我们就叫RA,我们重定向携带数据呢,我们之前用过两种,那第一种是ra.and flash attribute,这是模拟session的,接下来我们这个and attribute将添加一个属性,这样的话呢,我们重定向就会将这个数据自动的放到我们这个ul后边,我们将这个SQID拿过来,好,我们重定向到这个位。
09:13
址,而且我们刚才也看到了,我们想要重定向到这个位置,我们发现它这一块呢,直接是拿到当前项目,它是拿到我们这个服务器的端口以及完整地址,而我们实际要真正的重定向,我们是以域名的方式,所以我们现在还来写成域名HTTP,我们现在是购物车服务,我们就叫cut,点鼓励mail,点一个。com下边的and to cut success,我们来看一下这个重电箱会不会把我们这个UR路径上添上我们SQID,好,我们现在来重新启动,走,我们来测试一下我们的页面,先来到我们的这一块手机,那随便来找一个手机,比如就是这个,因为我们现在呢是登录状态,好,我们现在来添加我们的五号商品,我们来点击加入购物车,好,我们现在看到我们只要购物车加入成功,我们这是一个,然后呢,我们是跳转到HTM2这个页,而且我们SQID是五,相当于我们是查询五号的,我一直在这儿刷新,我们一直在这刷新,那么这一块呢,数量不会变化。
10:13
因为这是重定向,重定向到我们成功页以后呢,我们再做一个查询操作,而且我们现在是登录状态,那查的是我们登录状态的购物车,那现在这个人物号现在只有一个,如果我们这个red里边我们改了三个数据,比如我来点一个保存,我在下边来点击保存,那我们现在来到购物车里边,它还会动态的取出,诶我们是三个数据没问题,如果取一个没有的商品来看一下,那页面这一块呢,模板就会有一个错误,所以我们在这页面展示的时候,一定呢,把这些错误我们都来先给它排除掉,我们来到购物车的这个页面成功页,成功页下边的所有的取值前提,那就是我们现在有这个商品信息,所以我们把这一块的整个取值,我们来看一下,这块呢,这是一个div,一直到下边的这个div,我们整个这一块的div我们包装起来好,这是我们的成功,所以我们整个成功的前提判断,我们来加上就来加。
11:13
一个THFTHF,如果我们当前的这个item,这个内容不等于空,相当于我们查出了这个数据,我们才可以来展示,否则的话,那么就直接来告诉他,比如这个div购物车中还无此数据,好,我们来写一个div,那class呢,跟它这一块来保持一样,我们class,我们就将MC success。Count,这个好,我们就来给他一个大标题,比如我们的HR购物车中五商品,我们还可以给它显示一个链接去购物,诶,去购物,那这个购物呢,我们就直接跳转到我们的商城首页,HTTP冒号双斜杠,我们鼓励mail.com CTRLF9来看一下我们的页面效果,如果我们来找一个不存在的商品,但是如果按照我们常规跳转过来肯定是存在的,如果是用户在这儿乱写,我们也不应该展示这个错误页,我们应该展示这个购物车中无商品去购物,那我们就使用重定向的方式,我们呢防止了无限次刷新这个购物车表单的这个类似重复提交,我们虽然这一块添加购物车不是表单,是一个链接跳转,而且呢,重定向携带数据,我们可以用redirect attributes把它呢再来具体说一下redirect attributes,主要我们用过两个方法,第一个是按flash attribute,它是。
12:44
模拟session的方式,诶,它的作用就是将我们这个数据放到session中,然后在页面可以取出来,而且只能用一次将数据,它是放在session里边。可以在页面取出,可以在页面取出,但是只能取一次,但是只能取一次,而如果我们使用的是and attribute,不是flash attribute是这种方式,它呢就是将数据,将数据放在我们看到,由于我们下面这是重定向,我们自己没拼SQID,我们把SQ给这一放,它会自动的只要添加成功,我们这一块呢,只要添加成功,我们会自动的给后边来拼上SQID,所以呢,我们就是这个信息,那我们就拿过来。
13:35
而我们这一块购物车无商品,咱们这一块显示效果来改一下显示效果th if不为空显示这个,那为空显示下边的好th if Dollar、大括号item等等等CTF9,所以呢,我们现在如果使用redirect attribute这个方法,它是将数据放在URL后面,好我们就使用重定向解决了我们这个问题,刷新。
14:03
那么这一块的效果呢,就完成了,而且我们不管怎么刷新,我们都不会在这叠加数量。
我来说两句