您的位置:首页 > 其它

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

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

前端页面基本写完,想着地址栏里面没有参数,想着应该是发送的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的区别请参照如下地址:

/article/9934622.html

前台页面为:

//点击搜索查看购物车的商品
$(".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";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: