购物车搜索栏解决GET请求中文乱码问题

来源:互联网 发布:nginx 进程模型 编辑:程序博客网 时间:2024/06/08 06:45

昨天安排开发新功能,在购物车中加入搜索栏,搜索购物车中的商品是否存在,买了多少。。。。当时想想就觉得使用这商城的人都是土豪啊。。。购物车买的东西都不知道有多少,还需要增加搜索栏进行搜索。。。。没想那么多,就开始开发吧。

前端页面基本写完,想着地址栏里面没有参数,想着应该是发送的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
原创粉丝点击