00:00
前面呢,我们做了面包屑导航,那接下来我们再来加一个功能,还是参照京东我们完善面包蟹导航,比如我们选中了CPU品牌,我选一下,我发现呢,除了它上边添加了面包屑导航外,它下边关于CPU品牌的这个筛选已经没有这个筛选条件了,把它去掉,比如我们这个屏幕尺寸,我来插掉,我来选中一个屏幕尺寸以后,那就没有了屏幕尺寸的筛选条件,我选中一个分辨率以后,它上到了面包导航上,那下边呢就没有了。所以我们这一块的所有的筛选,包括品牌也一样,所有的东西呢都是一样,当我选中了以后,它呢就从我们的筛选结果里边去掉了,所以我们再来细化这一块效果,那这一块效果呢,主要都是来改页面,那这一块页面呢,我们来看我们的页面,我们品牌呢是在这儿放着呢,好,但是品牌呢,要展示不展示,我们还得进行一个判断,就是说如果当前已经有品牌的查询条件了。那么就上到面包屑导航里边,而不在这儿展示,所以呢,我们先来修改我们的源代码,原来我们的这一块再来检索的时候,我们只给属性上了面包蟹导航,那其他的也都一样,品牌我们的筛选条件有品牌还有分类,这两个呢,我们也给它上上面包蟹导航,所以我们来判断,如果说品牌不为空,If pal.get我们这儿有一个品牌的ID,我们相当于有品牌的筛选条件,它不等于空,并且呢,我们这个品牌点一个size大于零,点一个size,我就叫size是get,品牌ID点一个size大于零,那么就给它上到面包屑导航,怎么上呢?还是给我们的这个集合里边再来多封装上几个导航就行了,所以呢,前边属性的面包线封装完了,那我们再给这个集合里边继续来封装,那封装的前提呢,就是判断,如果我们这个集合。
01:59
为空,那么就在这儿不判断了,因为我们在这儿属性判断的时候,有属性才有这个几何。
02:07
那没属性都没了,所以我们把这个拿过来品牌分类,我们放到下边有品牌分类了,把之前的这个面包屑导航拿过来,点一个get。Nevis相当于给它里边填数据,那防止我们这一块呢,没有任何筛选属性,它的这一块navis都是空的,所以这一块呢什么都没设置来,我们拿到这个就是空的,所以呢,我们可以给他给一个默认值,你在这na VO的时候,这个面包屑导航呢,可以有一个默认的a list。如果我们属性预先有它生成的list,把这个覆盖,如果没有用我们默认的这个空list,那这个空list呢,我们就在这儿直接拿到以后,我们就给里边添东西就行了,And,一个我们添一个nay VO,你有一个nay VO,这个VO里边呢,主要两个东西,那品牌的话呢,那就是我们这个品牌信息的值拿过来。
03:01
走。我们拿到这个nay VO,我们来设置一个名字,点一个set navy name,我们就叫品牌,诶我们按照品牌筛选的品牌。然后呢,它的值NAV VO点一个set我们的na value,那这个品牌的值呢,那就是我们得自己查了,远程来调用方法来自己查todo们这个远程查询咱们这个所有品牌,而且这个品牌呢,我们有可能有多个传的是一个list,所以我们在远程服务来写一个方法,我们远程的品牌的CTRL这里边好,我们来写一个方法,返回我们所有的品牌数据,我们就在这at一个get map,我们发get请求。我们就叫in enforce,因为我们要查很多的品牌,然后呢,我们就叫public r info,我们路径变量呢就叫brand ids,我们传一个list类型的brand ID,我们的long类型的brand ID,然后呢,我们就来查这些品牌,那这个呢就不是路径变量了,那就是我们的请求参数了,我们呢就来获取我们的请求参数request per,假设呢,请求参数里边给我们传一个brand ids,它能给我们带来所有的品牌,然后我们来调用service brand service点我调用它的list方法查所有,或者我们来自己写一个get brand的a brands,我们来把我们的ID,把我们的ids,我们的所有的ID集合,我们都在这,好,然后呢,我们最终希望返回一个list类型的所有品牌的数据,我们就叫brand en,我们品牌数据就是它。
04:49
那就叫brands,好,这是我们返回的所有数据给这一放就行了,那我们远程呢,就要调用这个方法,我们先把这个方法呢实现出来,走来创建出来,然后呢,我们来添加上它的这个实现,那这个方法呢非常简单,我们要做的就只是来查所有们使用base map,我们品牌的这个DAO,点一个有一个我们查所有的list select list方法,这有一个corry upper,那我们就直接拗一个corry upper的泛型,我们传brand n好,我们想要查它点一个应我们的ID,我们的品牌ID,在我们指定的这个几何里边,把这些查出来,所以呢,我们的列应该是品牌ID,我们品牌ID在数据库对应的是brand ID这一列,好我们就来它查到的所有的东西直接一返回。
05:43
能远程方法呢,就写好了,我们把这个方法要调用,我们就直接来复制过来,把它签名给这一拿来到我们search服务我们的份里边,好商品服务呢,除了调这个,还有我们这个,这个呢,我们返回的整个完整签名,我们在上边product,我们的brand,好,我们拿过来在我们的phone service里边。
06:08
这样我们可以获取到所有的这个品牌的名字,我们主要获取的是所有品牌的完整详细信息,而且呢,大家注意我们这两个方法呢,都是远程调用,而这个远程调用呢,可能非常耗时,远程的这个方法呢,我们最好给他。加到缓存里边,所以呢,我们这个远程的这个方法,我们可以来看,之前我们调at tr,我们在这查询的时候呢,这个很麻烦,所以呢,我们让远程的这一块返回结果,我们都可以让它做缓存,我们就叫catch able catch able呢我们来指定缓存到哪个区域。那么这个所有的属性我们就叫at tr这个区域,然后呢,缓存用的key是什么?那我们就直接我们用成我们的at tr info,好,我们用at tr info,但是呢,我们是哪个的at tr info,因为我们这有当前的属性ID,所以我们应该还给它拼上来,我们使用冒号来加上一个当前的这个参数的值,那我就可以来井号root,我们来获取当前参数,这个参数呢有一个二,那我就二零,我获取第一个参数的值,现在我把参数的值也拼上,那我缓存里边就知道,诶这是一号属性的信息,二号属性的信息,包括我们这个品牌的,我们想给它在这儿来加复杂缓存的也都可以加上,行,我们就以一个为例,那么下边在这一块查询所有的品牌,我们就来调用远程的接口,它呢有一个叫info,但这个呢应该是品牌的info,我们把这个方法呢改一下,我们查的是品牌。
07:45
的info。然后呢,传入我们指定的几何就行了,好,那就叫品牌的ino,点一个brands ino来传入我们整个的list,那就是p get brand ID,把这个呢传过来,他呢就能帮我们来查询到所有的R数据,那我们也一样,R点一个get,它扣的,如果它是等等零,说明我们远程查询成功,好,如果它等等零,我们远程呢就查询成功,我们就拿到远程的数据,Get data get data,我们远程数据里边我们放的,我们来看一下,我们放的呢叫我们不是at tr,是brand,放的呢叫brand,就是这个brand值呢是一个list类型的,我就复制过来,CTRLC,好。
08:38
我们就来获取brand数据值呢,我们来new一个type reference,我们的复杂类型都使用这个type reference。好,它的类型呢,我们就来写上一个list类型的the brand这个实体类。但这个实体类呢,我们呢,直接给它对拷一个属性过来就行了,包括商品里边虽然有brand相关的这个VO。
09:07
但是呢,我们要完整的内容,我就把它复制过来。比如我们就要这个ID和brand name,然后呢,我们这个VO既然没有抽取到这,我们就给这来抽取一个,好,我们也叫brand VO brand VO,因为我们远程。掉了别人,那别人返回的数据呢,我们就得照着封装。那封装完了,我们就在这list类型里边返回的就是brand VO。r.get data,好,我们最终返回我们所有的品牌数据,那品牌的所有的名字,那就应该是。我们拿到的这个品牌数据,好,我们来给它进行一个便利点,一个stream,我们不用stream了,我们就来用一个增强for,拿到每一个品牌的这个名字。品牌的名字,点一个get品牌的name,那么最终的大名字就在这。比如我们使用string buffer,好,这个buffer等于new一个string buffer。
10:13
我们每次呢,把这个品牌名给上面一拼,Ber点一个end。你把我们每一个品牌名呢,我们都拼到后边啊,拼到后边这是我们品牌的名字,那每一个品牌名呢,都可以以及我们这个。分号来分割起来,那么最终所有的品牌名我就打过来点一个。Buffer点图瓷砖,这就是我们的品牌名字。品牌名字封装完,包括我们品牌想要跳去的地址门VO点一个set link,那当然来选中这个以后要跳去哪个地址,那跟前边一样,都要先编码再替换,那么把这个方法呢,我直接来抽取过来。好,把这个方法呢,我来抽取一下,这就是我们这个替换文字符串,我们就叫CT啊,我们来抽取一个方法,我们就叫repl query string,好,我们的替换这个字符串。
11:13
好,我们来指定上这个方法,我们从这里边替换,我们把要替换的值拿过来,我们看一下这个方法,这是我们要替换的值,我们在这儿来进行转换,包括呢,我们要替换的K,我们也得告诉我们,好,我们最额外再来加一个,要替换的时候,我们替换哪个K,我们指定哪个K,就给你来替换哪个K。好,我们来加上来指定的K,这是我们要替换的值,这个值呢,我们还要进行转换,好拿过来来掉了这个方法的所有人,那这一块呢,他要替换的是at t RS这个值。那我们在下边也一样来调用这个方法,拿到我们要替换的值,我们set the link,那就是这个值,好,我们来replace我们想要替换的值,那就是我们当前的所有这些品牌信息,所有品牌信息呢,我们前端会传一个叫brand ID,因为呢,它有非常多的brand ID,它等于什么值,我们要来T,所以呢,我们再来遍历所有brand ID的时候。
12:16
来看,在这来拼名字的时候,把最终的所有的要替的值我们挨个提,那第一个我们肯定是brand ID等于它当前的品牌ID,来我们把第一个呢值1TT完以后的字符串,第二个还要继续T,所以我们把这个放到这,每次给它进行赋值就行了。最终便利完将所有的品牌的这个筛选项全部替换完我们要去的URL链接地址,那就是我们指定的这个,把前面这一串复制过来,把它我们拿过来就是它好,我们把这个set link来放过来。这就是我们说的这个,可能品牌ID有很多,我们把挨个呢,按照ID都得剃,那剃完以后我们这个VO就好了,放在这儿。
13:00
那我们品牌这个就做好了,同样的还有分类,这个分类呢,我就留给大家做吧,都是一模一样的模式,这个分类,而且呢,另外分类大家注意的就是分类呢,我们说不需要咱们这个导航取消,所以呢大家可以不不拼这个URL的地址,但是呢,分类的整个提示我们还得有好先保证呢,我们选中某一个东西先能上到我们的面包屑导航里边,然后接下来我们再来改我们的页面,我们的页面希望的是我们选中一个以后,然后呢它先上去,上去以后呢,把我们CPU品牌对应的这一项我们来剔除掉,包括呢,我选中品牌了,把品牌这一项也剔除掉,好我们现在来重启我们的这个服务,我们品牌呢也能上到面包蟹导航里边,那想要剔除掉呢,我们来改我们的历色HTMMR,相当于在便利的时候判断一下,有这个条件就不显示了,比如我们在品牌里边来找一下我们这个品牌的这一块CTRLF,我们来找品牌。
14:00
好品牌我们一直来找品牌在这儿,品牌的所有的值我们在这儿来便利,而且呢,整个这个品牌的选择就是它的这一块我们来缩一下,再往上缩,这是我们这个品牌走,整个品牌呢,它必须是。没有品牌查询条件的时候,我们显示有就不用显示了。所以呢,我们来使用一个我们就叫TH位置,我们先来获取我们当前品牌有没有被选中,来刀了幅大括号,我们从请求参数里边per,如果品牌被选中了,我们会传一个品牌ID,如果有这个品牌ID,我们先来把品牌ID给它赋值一个我们这个变量。所以呢,我们在这来判断THF。TF。如果有这个品牌ID,那我们就不用显示品牌了,所以呢,Dollar福大括号,我们直接使用strength,点一个is empty我们来判断它,也就说它如果为空我们才显示品牌,它不为空就不显示,来CTRLF9页面呢,来重新刷新一下,分类这一块呢就不做了,属性这一块要做,而且每一个属性便利显示还不同,我们在这是便利每一个属性的,好我们来看一下我们的效果,先来看品牌,那我们现在有品牌。
15:27
品牌的筛选条件呢,这也上来了,那么品牌这一块呢,就不应该显示,那么这一块呢,肯定是判断出问题,来看一下我们的这个里边能不能it's empty判断成功,比如说我们这个品牌的这一块是空才显示,不是空,我们带了品牌的筛选条件,我就不用显示,来看一下效果来刷新我们这个判断呢,我们来双中抗。得到它最终的值,好来刷新一下走,那他判断的是false is empty是false,那确实我们这个有品牌,那么这有品牌呢,这就不显示,所以我们这个条件呢,写反了,我们来给它写一个非好CTRLF9如果飞空。
16:09
好,我们来刷新一下,看我么这呢带来品牌的筛选,那么这一块呢就不显示品牌了,把品牌去掉,那么就应该显示品牌,当然品牌去掉我们来看一下,那么这一块呢,没有去掉,那原因就是我们由于刚才改商品服务了,我们商品服务还没启动,所以呢们把商品服务跟检索服务重启一下,要不然我们远程也查不出品牌的这些信息,替换字符串这一块也不能生效,那么把这两个服务重新启动以后,我们再来页面来进行测试,那现在来重新测试一下走,好,我发现呢,我们这一块品牌现在来走。品牌这一块呢,还没取出名字,那肯定我们是调用有问题的,来看这个色没问题,Product,诶,Product我们看这报错了,我们这个数据库说我们这个品牌ID在数据库这一列没有找到,我们来看一下circle yog,那这个品牌ID不对啊,我们来看一下我们的brand的nity,我们品牌ID呢,对应的是我们的肯定我们数据库里边品牌的ID,我们来找一下品牌这张表打开。
17:13
哎,他叫brand-ID。所以呢,我们在这远程来查的时候,把品牌的controller来点进来,他在这来给我们检索所有品牌信息的时候,你叫brand-ID来重新启动一下我们的商品服务。我们现在再来进行一个测试回车,好,我们这个品牌呢,拿到一个闹。但是我们来看一下,当我来取消这个品牌的时候,我们确实可以取消的,那么这块呢,确实就不带品牌信息了。但这一块要不带品牌信息,那我们下边的这里边就要显示出品牌,所以我们来看一下我们的这一块页面,那页面的最终效果,那就应该是我们请求参数里边有没有这个品牌ID的值,我来CTRLF9来看一下,现在呢,我们这个判断来看一下,我们这个判断出false呢,还不出来,那是因为我们品牌这一块都没显示了,我们在这儿来把它整个呢来显示一下,我们把这个TH位置放到最外头。
18:14
我们放在最外头的原因是我们这两个标签的优先级问题,我们可以来看一下,这有一个属性的优先级,我们TH位置相当于声明变量,它的优先级呢比th if优先级低,所以呢,我们if先相当于判断生效了,所以我们就把它放在最外边,让它进行来判断,这次呢可能才会判断成功失败,我们来CTRLF9,我们来看一下我们的页面效果,我来刷新,那现在呢,我们没品牌,就应该显示我们品牌呢,确实为空,好,我们把这一块非条件去掉,CTRLF9我们再来刷新一下,走,当没有带品牌条件的时候,我们这儿就有品牌,当我们来带了品牌条件的时候,这不显示品牌,当把条件叉掉的时候,我们这一块呢又显示出来,我们属性这一块呢,也一样,我们来把页面再改一下就行了,但是属性这一块我们得知道我们到底呢筛选了哪些属性,我们来看一下,我们在这儿呢,这是我们的品牌,这是分类,我们在这遍利每一个属性。
19:14
如果我们当前属性条件里边有,那么就不用便利在这儿显示它了,相当于我们CPU品牌,那在这儿呢已经有,那么就不展示了,那为了方便呢,我们给前端返回的时候,我们直接将哪些属性筛选了,我们也返回出去,所以呢,我们这个result结果呀,我们额外再来加上一个值,来看一下我们的要返回的这个result,这个result里边呢,我们哪些属性的ID都被筛选了,我们在这呢,快速的给它加上,这样呢就好判断了,我们就直接写一个浪,我就叫a tr ids等于new一个a release。然后呢,我们就来进行判断,我们来看,只要我们每得到一个属性ID,相当这个属性呢,就被筛选了。
20:04
我们给result里边呢,就放好,我们把这一块我们来拿过来result点一个get,我们的at TDS,这是一个集合点and,把这个填进去,我们这个属性ID相当于已经被用了,那这样呢,前端就可以很方便的判断at ts里边有没有我们这个当前的这个ID,所以们这个TH,我们再来th if我们来判断判断集合里边有没有包含我们来看一下咱我们这个附件的工具类里边。我们肯定有一个力测集合,这个集合里边呢,可以判断我们当前集合有没有包含某一个元素,我们就用这个方法。好,你就来判断。到福大括号,我当前集合,当前是哪个集合呢?相当于我result里边的。Result里边呢,我们来给它封装了一个叫at t rids这个集合,我们来在这看一下,如果这个集合里边包含了当前元素,当前元素是谁呢?那就是当前at t RA的DTRA.t rad。
21:14
如果包含了,我们来判断一下Dollar符大括号。Dollar符大括号走。它包含了,那就不显示,它不包含我们才来显示下边。相当于我们没有这个筛选条件,我来CTRLF9来看一下我们的页面效果来刷新,那么这一块呢,构造有点问题,好,我们Java这一块,我们把这一块代码呢先来去掉,把我们的服务呢,我们先来起起来。服务先来提起来,因为我们有了热启动,我们哪一块出现了问题,只要我们编译以后呢,它都会重新启动,然后我们再来看,那现在加上了这个以后,相当于我们已经包含了的属性。我们就不显示了,来看最终效果。我们来到页面,我来刷新一下页面走,好,我们现在来看,当我选中了CPU品牌以后,那下边呢,就没有CPU品牌了,好,我把它叉掉,那就应该有,但是我们发现呢,这一块还是有问题,有问题的原因我们来看一下我们的页面,页面的便历还是写的有问题,这是我们当前正在便历的我们这个属性信息,所以我们这一块判断呢,完全失效的,好把这一块判断我们先来拿出来。
22:25
把这个拿出来,我们先让它显现出来,然后呢,我们再来下边看一下走下边呢,我们来看一下我们这一块判断能不能生效。因为我们返回的结果里边,Result里边带了at trds这个ids呢,相当于指定了我们到底哪些属性已经进来了,那这块指定的构造对了,我们这个构造呢,出现了问题,我们不应该在这儿构造。来看一下,我们在这呢,是分析结果的时候构造,哎,这个是有问题的,我们应该是分析请求参数,来看请求参数哪些是带了,好,我们来找一下我们这个请求参数,请求参数呢,有一个叫get ATT RS,大家呢都在分析这个,我们来CTRLF来找一下,找一下谁在用请求参数分析这块呢?在用请求参数分析,而且能拿到我们当前请求参数的属性的ID,拿到了相当于有当前属性了,有当前属性呢,我们也给里边放一个,诶放一个就行了,CTRLF9。
23:26
我们让项目呢重启一下,那现在来看一下页面效果,那么这块呢,便利还是没问题的,我们呢肯定判断每一个。我们条件里边有没有包含,来看一下效果好来刷新。我发现呢,CPU品牌跟CPU型号条件里边都没包含,如果我选了一个CPU品牌。然后发现CPU品牌没包含,但是CPU型号它呢没包含,这个呢是包含了的,那就是force。现在我们非false,它就不显示触了,那就是显示的,所以我们在这儿来写一下我们的这一块判断,那就是整个我们这个,如果我们里边不包含这个元素,我们就来显示的th if,好,我们这个判断呢,能正确的返回出false了。
24:13
CTRLY来看一下页面效果,CTRLF9。来重新刷新,来刷新好,现在我们看我选中了CPU品牌,CPU品牌就没有了,我选CPU型号,CPU型号就没有了。我来叉掉CPU型号,CPU型号又出来,叉掉CPU品牌,CPU品牌也出来,那么整个面包屑导航的功能就做结束了。那至此呢,我们整个检索的所有信息就完了,其他的细节大家可以在下边儿自己再来优化。
我来说两句