为了账号安全,请及时绑定邮箱和手机立即绑定

关于浏览记录重复的问题怎么解决,

在出现的浏览记录中会出现相同的商品,这个怎么做到不出现相同的商品呢?


老师的代码是不是不完善?


或者每次刷新details.jsp页面都会在浏览记录出现相同的商品

正在回答

6 回答

//逻辑处理最好放在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;
          }
   }


0 回复 有任何疑惑可以回复我~

有一个判断方式很简单:

              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添加。


              


0 回复 有任何疑惑可以回复我~
              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);


0 回复 有任何疑惑可以回复我~

//判断商品是否浏览过,只判断倒数五条中是否存在,浏览过则不再重复记录

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);


0 回复 有任何疑惑可以回复我~

假设商品的id不会出现包含关系的话,例如没有id:2和id:12这样的则可以用字符串函数indexOf(),来判断这个字符串中是否包含这个子串。

比较麻烦的方式就是:

将这个字符串以","分隔后成为一个数组,用每个添加的id和这个数组的元素遍历比较,如果不相同则添加到字符串中。

0 回复 有任何疑惑可以回复我~

把记录从cookie出来后比对一下,如果新的待添加的记录在cookie中有了,就不添加到cookie中,没有则添加到cookie中

0 回复 有任何疑惑可以回复我~
#1

连宏伟HW 提问者

有没有具体实现的代码,
2016-07-16 回复 有任何疑惑可以回复我~
#2

宗晟

回复 连宏伟HW代码有点乱,你看下,逻辑是跟上面那位仁兄一样
2016-08-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于浏览记录重复的问题怎么解决,

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信