您的位置:首页 > 其它

解决搜索结果排序问题

2017-10-27 09:35 225 查看
一、定位方法所在:



(1)访问项目网站,右击页面“审查元素”,审查network->XHR,接着测试需要的模块,如图我在搜索框中输入 “剁椒鱼头” ,根据名字就大致可以判断 调用的是“fetchAllRestaurants”。

(2)需要注意的是,由于是action层跟前端进行接触的,所以这里的“fetchAllRestaurants”对应的是action层,并且与方法上面的@action注解后面的value值对应。



这里虽然@action下的方法名也叫fetchAllRestaurants,但全属巧合。

注:我们知道写搜索的模块是action->customer->mobile->RestaurantSearch,所以在RestaurantSearch中按住ctrl+f调出文件内搜索“fetchAllRestaurants”即可找到对应的方法。

(3)
areaId = areaService.getLocalName().getId();


restaurantService.allRestaurantsForIndex(areaId, latitude, longitude, dishTypeId, isCut, orderTypeFlag, name);


接下来就需要找到是调用的哪个service层(实现业务逻辑)方法来实现相应功能的,以上两个代码段是action方法中调用了service的部分,第一个是为了得到地区id,第二个是通过已有参数返回所有餐馆(我们想要的搜索结果就是餐馆),所以能够定位到,是service层ResraurantService的allRestaurantsForIndex方法完成这部分功能。

注:把鼠标移到“allRestaurantsForIndex”上,按住ctrl加左键,即可对应到相应的service层接口,点击左侧“I”图标,即可找到相应的service层实现类。







二、更改目标代码:

allRestaurantsForIndex的代码中出现switch,里面分为case1,case2,case3,default。想要知道是哪一种情况,打上断点再去执行搜索结果模块即可,最后程序跳入了default,那么可以判定,我们要做更改的部分就只有如下代码:



在返回餐馆过程中,这部分代码已经执行了查询综合评分,但是最终没有实现排序,原因在于前端未能利用这部分数据进行排序操作。所以我们可以在后端进行排序,以下是加上的代码片段实现排序。



注解:Comparator是个接口,可重写compare()和equals()两种方法,用于比较。如果为null的话,就是使用元素的默认排序。

compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回-1,0或1

equals(obi)方法:仅当指定的对象也是一个Cpmparator,并且强行实施与此Comparetor相同的排序才返回true。

Collections.sort(list, new Comparator());的第二个参数就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。

compareTo() 方法用于将 Number 对象与方法的参数进行比较。可用于比较 Byte, Long, Integer等。

如果指定的数与参数相等返回0。

如果指定的数小于参数返回 -1。

如果指定的数大于参数返回 1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索 后端 排序
相关文章推荐