Java之品优购课程讲义_day10(1)

本文介绍如何在品优购项目中实现商品搜索结果的高亮显示,包括后端代码修改和服务层的具体实现,以及前端如何通过AngularJS的$sce服务和自定义过滤器展示高亮后的HTML内容。

品优购-高亮显示
1.1 需求分析
将用户输入的关键字在标题中以红色的字体显示出来,就是搜索中常用的高亮显示.

Java之品优购课程讲义_day10(1)
1.1 后端代码
修改服务层代码 ItemSearchServiceImpl.java

创建私有方法,用于返回查询列表的结果(高亮)

/**

*根据关键字搜索列表

*@param  keywords

*@return

*/

private  Map  searchList(Map  searchMap){ Map  map=new  HashMap();
HighlightQuery  query=new  SimpleHighlightQuery();

HighlightOptions  highlightOptions=new
HighlightOptions().addField("item_title");//设置高亮的域 highlightOptions.setSimplePrefix("<em  style='color:red'>");//高亮前缀
highlightOptions.setSimplePostfix("</em>");//高亮后缀

query.setHighlightOptions(highlightOptions);//设置高亮选项

//按照关键字查询Criteria  criteria=new
Criteria("item_keywords").is(searchMap.get("keywords"));

query.addCriteria(criteria);

HighlightPage<TbItem>  page  =  solrTemplate.queryForHighlightPage(query, TbItem.class);
for(HighlightEntry<TbItem>  h:  page.getHighlighted()){//循环高亮入口集合
TbItem  item  =  h.getEntity();//获取原实体类

if(h.getHighlights().size()>0  && h.getHighlights().get(0).getSnipplets().size()>0){
item.setTitle(h.getHighlights().get(0).getSnipplets().get(0));//设
置高亮的结果

}

}

map.put("rows",page.getContent());

return  map;

}

修改 ItemSearchServiceImpl 的 search 方法,调用刚才编写的私有方法
@Override

public  Map<String,  Object>  search(Map  searchMap)  { Map<String,Object>  map=new  HashMap<>();
//1.查询列表

map.putAll(searchList(searchMap));

return  map;

}

1.1 前端代码
我们测试后发现高亮显示的 html 代码原样输出,这是 angularJS 为了防止 html ×××采取的安全机制。我们如何在页面上显示 html 的结果呢?我们会用到$sce 服务的 trustAsHtml 方法来实现转换。

因为这个功能具有一定通用性,我们可以通过 angularJS 的过滤器来简化开发,这样只写一次,调用的时候就非常方便了,看代码:
(1)修改 base.js

// 定义模块:

var  app  =  angular.module("pinyougou",[]);

/*$sce 服 务 写 成 过 滤 器 */ app.filter('trustHtml',['$sce',function($sce){

return  function(data){

return  $sce.trustAsHtml(data);

}

}]);

(2)使用过滤器

ng-bind-html 指令用于显示 html 内容竖线 |用于调用过滤器

&lt;div class="attr" ng-bind-html="item.title | trustHtml"&gt;&lt;/div&gt;
|就是竖线,看起来有点斜是因为字体原因。

转载于:https://blog.51cto.com/13517854/2176657

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值