首先我们需要在taotao-search-web工程中添加对搜索服务的引用,如下图所示。

为了方便大家复制,现将springmvc.xml配置文件的内容贴出,如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"><!-- 加载外部属性文件 --><context:property-placeholder location="classpath:resource/*.properties" /><context:component-scan base-package="com.taotao.search.controller" /><mvc:annotation-driven /><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 配置静态资源映射 --><!-- 指定/WEB-INF/js/和/WEB-INF/css/下的所有的静态资源(包括子目录下的静态资源)都不被拦截 --><!-- mapping=/js/**:表示访问静态资源的路径的形式,/js/**表示可以访问/js/下的静态资源或者所有的子目录下的静态资源 --><!-- <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/><mvc:resources location="/WEB-INF/css/" mapping="/css/**"/> --><!-- 引用Dubbo服务 --><dubbo:application name="taotao-search-web"/><dubbo:registry protocol="zookeeper" address="192.168.81.131:2181"/>   <dubbo:reference interface="com.taotao.search.service.SearchService" id="searchService" /></beans>

然后在taotao-search-web工程中的com.taotao.search.controller包下编写一个SearchController类,如下图所示。

同样为了方便大家复制,也将SearchController类的代码贴出,如下所示。

package com.taotao.search.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import com.taotao.common.pojo.SearchResult;
import com.taotao.search.service.SearchService;@Controller
public class SearchController {@Value("${ITEM_ROWS}")private Integer ITEM_ROWS;@Autowiredprivate SearchService service;/*** 根据条件来搜索商品数据* * @param page:下一页没搜出来,原因在于这个page没有默认值,没有默认值,你在返回给jsp页面,那就是null,*            那么下一页就转不了了,转的时候把null转成一个数字就出问题了。所以应该给其一个默认值。*            也就是说刚开始查询的时候,你就应该给其一个默认值,例如1* @param queryString* @return* @throws Exception*/@RequestMapping("/search")public String search(@RequestParam(defaultValue = "1") Integer page, @RequestParam(value = "q") String queryString, Model model) throws Exception {// 1. 引入服务// 2. 注入// 3. 调用SearchResult result = service.search(queryString, page, ITEM_ROWS);// 4. 设置数据并传递到jsp页面中model.addAttribute("query", queryString);model.addAttribute("totalPages", result.getPageCount()); // 总页数model.addAttribute("itemList", result.getItemList());model.addAttribute("page", page);return "search";}}

下面我会对SearchController类当中的代码做一下解释,并且我们还需要在配置文件中配置下每页显示的商品数量。

首先,我来讲讲@RequestMapping("/search")注解中的值为何是/search,这还得要从搜索页面说起,在taotao-portal-web工程中的index.jsp页面当中是没有搜索代码的,搜索代码在commons/header.jsp页面当中,如下图所示。

我们打开commons目录下的header.jsp页面,可以看到当我们在搜索框中输入搜索关键字并按回车或者点击搜索按钮后会触发search方法,这个search方法并不在header.jsp这个页面当中,而是在引用的base-v1.js文件当中,如下图所示。

我们到base-v1.js文件当中找到search方法,在search方法中我们可以看到要访问的页面是search.html,而我们的taotao-search-web工程拦截的就是以.html结尾的请求,因此这是没有任何问题的。既然要请求的是search.html,那么我们当然要拦截的是search了。另外,大家在这里也可以看到请求后面的参数是以q来携带的,这个变量名字与我们SearchController类的search方法当中定义的参数名称(即queryString)不一致,名称不一致的情况下就需要指定映射关系了,于是便有了@RequestParam("q") String queryString

我们从上图的请求当中还可以看到并没有携带每页显示多少条数据的参数,而这个参数必须又要是灵活可配置的,因此最好将其写到taotao-search-web工程的resource.properties配置文件当中去,如下图所示。

SearchController类的search方法中Model类型的参数是为了向页面回显数据用的,我们可以看下search.jsp搜索页面都需要回显些什么数据,可以看到有四个值需要回显,这也刚好对应着我们在SearchController类中所回显的四个变量。

search方法最后返回的search逻辑视图经过Spring自动添加.jsp后缀之后,于是便去访问search.jsp这个页面了,并把四个变量也都带过来了,这样页面便可以正常显示数据了。

至此,实现商品搜索功能的表现层代码便写完了。

淘淘商城第55讲——商品搜索之表现层开发相关推荐

  1. 淘淘商城第53讲——商品搜索之dao层开发

    终于进入到商品搜索功能的开发中了,本文我来教大家编写实现商品搜索功能的dao层代码. 我们现在是在开发商品搜索这一功能,那么肯定是要访问索引库的,很显然在dao层中应该使用HttpSolrClient ...

  2. 淘淘商城第54讲——商品搜索之service层开发

    首先我们在taotao-search-interface工程的SearchService接口中声明一个根据搜索条件去查询搜索结果的方法,如下图所示. 然后我们在taotao-search-servic ...

  3. (转)淘淘商城系列——商品搜索功能表现层实现

    http://blog.csdn.net/yerenyuan_pku/article/details/72913431 首先我们在taotao-search-web工程中需要添加对搜索服务的引用,如下 ...

  4. 淘淘商城第43讲——搭建搜索服务工程

    Solr服务配置好之后,接下来我们就要考虑一个问题了,那就是我们要把商品数据导入到索引库里面才行,否则的话,我们是没有办法实现商品搜索这个功能的,可以想见我们势必要搭建一个搜索服务工程了. 我们还是先 ...

  5. 淘淘商城第44讲——搭建搜索系统工程

    上文我们一起搭建了搜索服务工程,本文我就将带领大家一起来搭建搜索系统这个表现层工程.下面我们就来新建一个taotao-search-web工程,该工程可参考taotao-portal-web工程来搭建 ...

  6. 淘淘商城第66讲——将搜索功能切换到集群版Solr时,我就不信你没遇到过这个异常:org.apache.solr.client.solrj.SolrServerException ···

    问题描述 今天我在将搜索功能切换到集群版Solr,准备向索引库中导入商品数据时,碰到了一个异常.真的是一天天的都会碰到异常,太闹心了

  7. 一个淘淘商城项目送给你,愿你有一个灿烂的前程!

    写在前面 今天是2020年6月23日,星期二,天气晴.2020年已过一半,回想一下,这真是一个多灾多难的年份啊!可生活依然要继续,活着的人依然要继续前行.这是没道理的事情. 好了,回到主题,说说写这篇 ...

  8. SSM分布式项目之淘淘商城-第二天(IDEA)

    文章大纲 一.第二天课程计划 二.功能分析 三.Dubbo 四.框架整合 五.dubbo配置测试 六.商品列表查询 七.Dubbo监控中心 八.参考文章 淘淘商城课程大纲 课程大纲 一共14天课程 ( ...

  9. SSM分布式项目之淘淘商城-第六天(IDEA)

    文章大纲 一 .第六天课程计划 二.搜索工程搭建 三.测试使用solrJ管理索引库 四.把商品数据导入到索引库中 五.商品搜索功能实现 淘淘商城课程大纲 课程大纲 一共14天课程 (1)第一天:电商介 ...

最新文章

  1. uwsgi bind(): Permission denied [core/socket.c line 230]
  2. Photoshop用户必知必会的28个快捷键
  3. trove mysql 镜像_trove 基于 centos7 制作 mysql5.6 镜像
  4. linux 应用网络连接失败的原因,PuTTY网络错误:软件导致连接中止
  5. 基于Matlab的模拟通信实验平台设计,【通信原理仿真实验】通信原理虚拟实验仿真平台的设计和实现_玛雅作文网...
  6. 语言中要输出表格_C语言 | 表格输出若干人的信息
  7. flutter图片点击跳转_Flutter系列之Platform Channel使用详解
  8. CSDN博客如何复制别人的文章到自己的博客(很详细,看着图片傻瓜式操作)
  9. 虚拟机服务器坏处,服务器虚拟化技术的优缺点
  10. 登陆豆瓣显示服务器开小差,豆瓣打不开
  11. novoton-msys_init函数
  12. 史上最全最详细的Anaconda安装教程
  13. Akari问题详细解答
  14. 一篇文章带你走近Android自定义view
  15. android高级开发强化实战,高级Android开发强化实战[PDF][215.59MB]
  16. python作业:有一个学生成绩表,包括学号、姓名、高数、英语,计算机。 录入若干个学生学号、姓名、高数、英语,计算机5项数据。 将学生成绩表数据写入文件,文件名为“学生成绩表.txt
  17. JOSH智能物联网操作系统正式发布
  18. 中考计算机考试辽宁,中考考哪些科目(2019辽宁中考科目及分值)
  19. 省赛 蓝桥杯2015 JavaC
  20. Python字符串常规操作

热门文章

  1. 《“通用语”与“兽人语”互译手册》之部落篇
  2. python代码信息传播模型
  3. 申请赴美签证的经历:一分钟通过面试
  4. 漫画:旅行青蛙是什么在吸引大家
  5. 基于Lattice XO2-4000HC FPGA核心板及电子森林综合训练底板的ADC数字电压表及OLED显示设计(Verilog)
  6. 翻遍了整个知乎,终于找到了这套阿里Java面试指南,强烈建议社招程序员都看看
  7. 凌动智行就相关问题发布股东信
  8. Android桌面小组件---Widget组件开发(什么是Widget)
  9. Python:实用的IPython(一种交互式开发环境)
  10. nacos项目启动报错:Connection refused: no further information