购物车搜索栏解决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的区别请参照如下地址:

http://blog.csdn.net/yaoyao9565/article/details/50953040

前台页面为:

//点击搜索查看购物车的商品
	$(".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";
	}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值