关于浏览记录重复的问题怎么解决,
在出现的浏览记录中会出现相同的商品,这个怎么做到不出现相同的商品呢?
老师的代码是不是不完善?
或者每次刷新details.jsp页面都会在浏览记录出现相同的商品
在出现的浏览记录中会出现相同的商品,这个怎么做到不出现相同的商品呢?
老师的代码是不是不完善?
或者每次刷新details.jsp页面都会在浏览记录出现相同的商品
2016-07-12
//逻辑处理最好放在itemsDao类里
public ArrayList<Items> getViewList(String list){ ArrayList<Items> itemList = new ArrayList<Items>(); ArrayList<Integer> ls = new ArrayList<Integer>(); String[] arr = list.split(","); int iCount=5; if(list!=null&&list.length()>0){ //去重,并且按最新浏览顺序输出 for(int i=arr.length-1;i>=0;i--){ if(ls!=null&&!ls.isEmpty()){ if(ls.contains(Integer.parseInt(arr[i]))){ continue; }else{ ls.add(Integer.parseInt(arr[i])); } }else{ ls.add(Integer.parseInt(arr[i])); } } if(ls.size()<=iCount){ for(Integer i:ls){ itemList.add(getItemById(i)); } }else{ for(int i=0;i<iCount;i++){ itemList.add(getItemById(ls.get(i))); } } return itemList; }else{ return null; } }
有一个判断方式很简单:
Cookie[] cookies = request.getCookies();
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
if(c.getName().equals("ListViewCookie"))
{
list = c.getValue();
}
}
}
//这里已经得到需要的字符串在list里面了;
id=request.getParameter("id");
// 得到需要添加的字符串id
if(list.startsWith(id+",")){
int length = id.length+1;
list.remove(0,length);
}
if(list.contains(","+id+","){
list.replace( ","+id+"," , "," ) ;
}
直接得到重复的id删除后的字符串,然后再就判断是否超过多少条,将id添加。
String list =""; String id =""; //从客户端获得Cookies集合 Cookie[] cookies = request.getCookies(); //遍历这个Cookies集合 if(cookies!=null&&cookies.length>0) { for(Cookie c:cookies) { if(c.getName().equals("ListViewCookie")) { list = c.getValue(); } } } id=request.getParameter("id");//当前点击的商品ID String[] arr = list.split(",");//将cookie中的list按','分割成数组 System.out.println("arr.length="+arr.length); //如果浏览记录达到10条,清零. if(arr!=null&&arr.length>0) { if(arr.length>=10)//浏览记录达到10条,cookie清零 { list=""; list+=id+","; }else{ int i=0; /** * while循环遍历arr,如果当前id跟arr中的某个id相同,则将当前id后的所有id向前移动一位, * 并将当前id置于arr数组末尾(最新的浏览记录总在最后面) * 例如:当前list为 1,3,8,6,7,5,如果当前id是3,则经过处理后新的list为:1,8,6,7,5,3, **/ while(i<arr.length){ if(id.equals(arr[i])){ for(int j=i;j<arr.length-1;j++){ arr[j]=arr[j+1];//从当前id位置起,将后面的id向前移动一位 } arr[arr.length-1]=id;//将当前id置于arr数组末端 //将arr数组重新组合成list字符串 StringBuffer sb= new StringBuffer(); for(int k=0;k<arr.length;k++){ sb.append(arr[k]); sb.append(","); } list=sb.toString();//新的list字符串,当前id在最末尾 break;//当前id已经存在于list中,上面已经将list重新排序,此处跳出循环 } i++;//i自增 /** * 当i==arr.length,说明循环结束了, * 并且一直没有通过break跳出循环,说明list中不存在当前id * 直接将当前id加到list末尾 **/ if(i==arr.length){ list+=id+",";//直接将当前id加到list末尾 } } } } //重新生成cookie并添加 Cookie cookie = new Cookie("ListViewCookie",list); response.addCookie(cookie);
//判断商品是否浏览过,只判断倒数五条中是否存在,浏览过则不再重复记录
String[] list = browsingList.split(",");
boolean exist = false;
int icount = 5;
if(list!=null&&list.length>5){
for (int j=list.length-1;j>=list.length-icount;j--) {
if (list[j].equals(request.getParameter("id"))) {
exist = true;
}
}
}else{
for(String id:list){
if (id.equals(request.getParameter("id"))) {
exist = true;
}
}
}
if (!exist) {
browsingList += request.getParameter("id") + ",";
}
String[] arr = browsingList.split(",");
if (arr != null && arr.length > 0) {
if (arr.length >= 1000) {
browsingList = "";
}
}
Cookie cookie = new Cookie("browsingList", browsingList);
response.addCookie(cookie);
举报