購物車搜尋欄解決GET請求中文亂碼問題
阿新 • • 發佈:2019-02-15
昨天安排開發新功能,在購物車中加入搜尋欄,搜尋購物車中的商品是否存在,買了多少。。。。當時想想就覺得使用這商城的人都是土豪啊。。。購物車買的東西都不知道有多少,還需要增加搜尋欄進行搜尋。。。。沒想那麼多,就開始開發吧。
前端頁面基本寫完,想著位址列裡面沒有引數,想著應該是傳送的post請求吧,使用ajax傳入中文應該輕輕鬆鬆,但是一看後臺,我靠。。。
竟然傳送的是GET請求,前臺使用的是EL表示式和jstl標籤進行的顯示效果。。。。而且後臺的MAP傳入前臺影響了排序。。。真不知道之前這個功能是怎麼設計的。。。心中一萬匹草泥馬跑過。。。。//獲取購物車訂單 @RequestMapping(value="/getOrder", method=RequestMethod.GET) public String list(HttpServletRequest request,HttpSession session){ Agent agent= (Agent) session.getAttribute("agent"); //取出購物車 List<Cart> list=cartService.finCart(agent.getId()); Map<String,Cart> map=new HashMap<String, Cart>(); for(Cart dic:list){ map.put(dic.getGoods_id(), dic); } // Map<String,Object> map = null; if(map != null){ //生成訂單編號 String order_num="YCF"+DateUtil.formatDate(new Date(), "yyyyMMddHHmmssSSS"); request.setAttribute("order_num",order_num); request.setAttribute("carts", map); request.setAttribute("cartsCount", map.size()); }else { request.setAttribute("cartsCount", 0); } session.setAttribute("productNums",GoodsController.getCartsProNums(cartService,session)); return "shop/order/cart.jsp"; }
也不多想了。。。改吧。。。
首先前臺JavaScript中使用encodeURIComponent()對中文進行處理,對於此函式encodeURIComponent()和escape,encodeURI的區別請參照如下地址:
前臺頁面為:
//點選搜尋檢視購物車的商品 $(".search-btn").click(function(){ var goods_name = $("#goods_name").val(); if(goods_name!=""&&goods_name!=null) { window.location.href=$("#basePath").val() + "/shop/orders/getOrder.do?goods_name="+encodeURIComponent(encodeURIComponent(goods_name)); } });
然後後臺接受進行相應的處理:
goodsName=java.net.URLDecoder.decode(goodsName,"UTF-8");
這樣就不必改tomcat配置或者進行ISO885921轉碼來得那麼被動了。測試沒有問題。在購物車中我添加了flag開關是用於查明使用搜索條件後list的size是否為0的情況,因為前臺使用的是jstl加EL表示式判斷而展現不同的DIV的,增加了搜尋條件後展示層也需要跟著變動更改後的後臺程式碼為:
//獲取購物車訂單 @RequestMapping(value="/getOrder", method=RequestMethod.GET) public String list(HttpServletRequest request,HttpSession session){ Agent agent= (Agent) session.getAttribute("agent"); String goodsName = request.getParameter("goods_name"); List<Cart> list = null; //用於判斷搜尋查詢條件情況下list.size()是否為0的情況,為0則將flag設定為false,用於前臺顯示全部列表問題 boolean flag = true; try { if(StringUtil.isNotEmpty(goodsName)) { goodsName=java.net.URLDecoder.decode(goodsName,"UTF-8"); list = cartService.findCartByGoodsName(agent.getId(), goodsName); if(list.size() == 0) { flag = false; } } else { //取出購物車 list = cartService.finCart(agent.getId()); } // Map<String,Cart> map=new HashMap<String, Cart>(); // for(Cart dic:list){ // map.put(dic.getGoods_id(), dic); // } // Map<String,Object> map = null; // if(map != null){ if(list.size() > 0){ //生成訂單編號 String order_num="YCF"+DateUtil.formatDate(new Date(), "yyyyMMddHHmmssSSS"); request.setAttribute("order_num",order_num); // request.setAttribute("carts", map); // request.setAttribute("cartsCount", map.size()); request.setAttribute("carts", list); request.setAttribute("cartsCount", list.size()); } else if(flag) { request.setAttribute("cartsCount", 0); } else { //搜尋查詢條件情況下list.size()為0,則給出連結可以進入完整購物車訂單列表 request.setAttribute("cartsCount", -1); } session.setAttribute("productNums",GoodsController.getCartsProNums(cartService,session)); } catch (UnsupportedEncodingException e) { log.error(e.getMessage(), e); e.printStackTrace();TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return "shop/order/cart.jsp"; }