关于浏览记录重复的问题怎么解决,
在出现的浏览记录中会出现相同的商品,这个怎么做到不出现相同的商品呢?
老师的代码是不是不完善?
或者每次刷新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);
举报