1. 程式人生 > >購物車搜尋欄解決GET請求中文亂碼問題

購物車搜尋欄解決GET請求中文亂碼問題

昨天安排開發新功能,在購物車中加入搜尋欄,搜尋購物車中的商品是否存在,買了多少。。。。當時想想就覺得使用這商城的人都是土豪啊。。。購物車買的東西都不知道有多少,還需要增加搜尋欄進行搜尋。。。。沒想那麼多,就開始開發吧。

前端頁面基本寫完,想著位址列裡面沒有引數,想著應該是傳送的post請求吧,使用ajax傳入中文應該輕輕鬆鬆,但是一看後臺,我靠。。。

//獲取購物車訂單
	@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";
	}
竟然傳送的是GET請求,前臺使用的是EL表示式和jstl標籤進行的顯示效果。。。。而且後臺的MAP傳入前臺影響了排序。。。真不知道之前這個功能是怎麼設計的。。。心中一萬匹草泥馬跑過。。。。
也不多想了。。。改吧。。。

首先前臺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";
	}