商品搜索结果展示——淘淘商城(二十一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40369829/article/details/79948146

商品搜索

需求

分析

  • head.jsp中调用search函数,参数值为key。
    9.searchKey.png
  • 这个search函数在base-v1.js中,包含请求url。
    9.searchjs.png
  • 响应的search.jsp中需要通过调用服务获取一些参数,包含商品列表、查询字符串、分页信息。
    9.params1.png
    9.params2.png
  • 注意item中需要包含图片列表的images属性,而数据库中image字段是用逗号分隔的url,需要转换。
http://192.168.57.139/2018/04/14/1523681619033411.jpg,http://192.168.57.139/2018/04/14/1523681619250477.jpg,http://192.168.57.139/2018/04/14/1523681619979646.jpg

总结

  • 在taotao-portal中开发。
  • 请求url:http://localhost:8082/search.html?q={查询字符创}
  • 请求参数:url中的查询字符串,当前页(默认1)。
  • 响应结果:包含参数的search.jsp。
    • query:查询字符串。
    • totalPages,page:分页信息。
    • itemList:商品列表,注意item中images属性。

Service层

  • pojo包下创建SearchResult和Item这两个类。Item中的images属性将image转换为Url的数组。
public class SearchResult {

    //查询结果列表
    private List<Item> list;
    //总记录数
    private long recordCount;
    //总页数
    private long pageCount;
    //当前页
    private long curPage;
}
public class Item {

    private String id;
    private String title;
    private String sellPoint;
    private long price;
    /**
     * 使用,分隔的多个图片url
     */
    private String image;
    private String categoryName;
    private String itemDesc;
    /**
     * 图片url的数组
     */
    private String[] images;

    public String[] getImages() {
        if (images == null) {
            setImages(image.split(","));
        }
        return images;
    }

    public void setImages(String[] images) {
        this.images = images;
    }
}
  • rest.properties中配置搜索服务的url。
#搜索服务基础url
SEARCH_SERVICE_URL=http://localhost:8083/search/query
  • 创建SearchService和实现类,根据查询字符串和页码,调用searh工程提供的服务,查询结果。
@Service
public class SearchServiceImpl implements SearchService {

    @Value("${SEARCH_SERVICE_URL}")
    private String SEARCH_SERVICE_URL;

    @Override
    public SearchResult search(String queryString, int page) {
        //设置查询参数
        Map<String, String> params = new HashMap<>();
        params.put("q", queryString);
        params.put("page", String.valueOf(page));

        try {
            //执行查询
            String res = HttpClientUtil.doGet(SEARCH_SERVICE_URL, params);
            TaotaoResult taotaoResult = TaotaoResult.formatToPojo(res, SearchResult.class);
            if (taotaoResult.getStatus() == 200) {
                SearchResult result = (SearchResult) taotaoResult.getData();
                return result;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

Controller层

  • 创建SearchController,接收查询字符串和页码,调用Service层,回显参数和逻辑视图。
@Controller
public class SearchController {

    @Autowired
    private SearchService searchService;

    @RequestMapping("/search")
    public String search(@RequestParam("q") String queryString, @RequestParam(defaultValue = "1") Integer page,
            Model model) {
        SearchResult searchResult = searchService.search(queryString, page);

        model.addAttribute("query", queryString);
        model.addAttribute("totalPages", searchResult.getPageCount());
        model.addAttribute("itemList", searchResult.getList());
        model.addAttribute("page", page);

        return "search";
    }
}

运行工程

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页