黑马程序员技术交流社区

标题: 【郑州校区】Java之品优购课程讲义_day10(1) [打印本页]

作者: 谷粒姐姐    时间: 2018-9-18 14:51
标题: 【郑州校区】Java之品优购课程讲义_day10(1)
品优购-高亮显示
1.1 需求分析
将用户输入的关键字在标题中以红色的字体显示出来,就是搜索中常用的高亮显示.

1.1 后端代码
修改服务层代码 ItemSearchServiceImpl.java

创建私有方法,用于返回查询列表的结果(高亮)
[AppleScript] 纯文本查看 复制代码
/**

*根据关键字搜索列表

*@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()){//循环高亮入口集合
[AppleScript] 纯文本查看 复制代码
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 方法,调用刚才编写的私有方法
[AppleScript] 纯文本查看 复制代码
@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
[AppleScript] 纯文本查看 复制代码
// 定义模块:

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

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

return  function(data){


return  $sce.trustAsHtml(data);


}


}]);
[AppleScript] 纯文本查看 复制代码
(2)使用过滤器

ng-bind-html 指令用于显示 html 内容竖线 |用于调用过滤器
[AppleScript] 纯文本查看 复制代码
<div  class="attr"  ng-bind-html="item.title  |  trustHtml"></div>
|就是竖线,看起来有点斜是因为字体原因。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2