是这样的,我在实现一个购物车的功能,当点击添加到购物车时,如果购物车页面已经打开,则只刷新该页面,而不是打开新的购物车页面(这样会形成多个页面,且数据也不一致!),就像当当网那样的功能,通过一个页面刷新购物车页面,我在网上看到说是用js写,用到这样的一个方法:window.opener.reload();具体不是很清楚,是不是还要判断购物车页面是否打开,那又该如何判断呢?盼各位解答下,谢谢!

解决方案 »

  1.   

    你完全可以在servlet端实现你想实现的逻辑:
    你可以先判断购物车是否打开,没有正常打开一个页面,要是已经在购物车页面则添加完物品了,还跳回原来页面:代码-->>
    String ref = request.getHeader("referer");
    response.sendRedirect(ref);
      

  2.   

    不是很明白楼主什么意思,window.opener.reload()的意思就是打开这个页面的前一个页面重新加载,也就是刷新。不知道我描述的是否清楚。
      

  3.   

    没那么复杂。
    用target属性就好了,别的(只打开一个窗口)交给浏览器控制
    用链接的话,这样
    <a href="xxx" target="blank">go</a>
    用form提交的话,这样
    <form action="xxx" method="xxx" target="blank">
      

  4.   

        不是的,一般的普通游客也可以添加商品到购物车,我说的是像当当网那样的,添加商品至购物车,购物车页面已打开,则刷新该购物车页面,而不是再次打开一个新的购物车页面,我用的是session对象存储的购物车数据,点击添加商品的链接是先提交的一个处理添加商品购物车的servlet,然后由servlet控制跳转到购物车页面,但是每次添加一个新的商品,就要打开一个新的购物车页面,这样就形成了很多的购物车页面,而且显示的数据也不一致(但刷新后数据是一致的),而我想要的结果是指打开一个购物车页面,购物车页面没有打开就打开,如果已打开就刷新该购物车页面
      

  5.   

    我也想到用target属性,可是在服务器端如何使用?因为我是这样处理的:点击添加商品的链接是先提交的一个处理添加商品购物车的servlet,然后由servlet控制跳转到购物车页面,但是每次添加一个新的商品,就要打开一个新的购物车页面,这样就形成了很多的购物车页面,而且显示的数据也不一致(但刷新后数据是一致的),而我想要的结果是指打开一个购物车页面,购物车页面没有打开就打开,如果已打开就刷新该购物车页面
      

  6.   

    这是点击添加至购物车的链接:<a target="_blank" href="AddBookItem?id=<%=book.getBookID() %>" >购买</a>   这是我的处理添加购物车servlet代码:public class AddBookItem extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html;GB2312"); String isbn = new String(request.getParameter("id").trim().getBytes(),
    "GB2312");
    HttpSession session = request.getSession(); // 非法请求,如果根据isbn没有查询到该书籍,则可能为非法请求
    BookInfoDao bookDaoImpl = DAOFactory.getBookInfoDaoInstance();
    BookInfo book;
    try {
    book = bookDaoImpl.queryByISBN(isbn);
    if (book.getBookID() == null) {
    String msg = "非法请求!";
    session.setAttribute("msg", msg);
    this.getServletContext().getRequestDispatcher("/error.jsp").forward(request, response);
    } else {
    // 标杆值,看是购物车中是否已存在该书籍
    boolean flag = false;
    Vector<CartItem> cart = (Vector<CartItem>) session.getAttribute("cart");
    CartItem item;
    // 如果获得的cart为空,创建一个新的cart对象
    if (cart == null) {
    // 实例化一个新的CartItem对象
    item = new CartItem();
    cart = new Vector<CartItem>();
    item.setBookId(book.getBookID());
    item.setBookname(book.getBookname());
    item.setPic(book.getPic());
    item.setPrice(book.getNowprice());
    item.setNum(1);
    item.setSumprice();
    cart.add(item);
    } else {
    // 遍历cart,加入购物车的书籍是否已存在
    for (int i = 0; i < cart.size(); i++) {
    // 如果请求的书籍重复,让其购买数量+1
    if (cart.elementAt(i).getBookId().equals(isbn)) {
    cart.elementAt(i).setNum(
    cart.elementAt(i).getNum() + 1);
    cart.elementAt(i).setSumprice();
    flag = true;
    break;
    }
    }
    if (flag == false) {
    // 购物车中不存在该书籍,实例化一个新的CartItem对象
    item = new CartItem();
    item.setBookId(book.getBookID());
    item.setBookname(book.getBookname());
    item.setPic(book.getPic());
    item.setPrice(book.getNowprice());
    item.setNum(1);
    item.setSumprice();
    cart.add(item);
    }
    }
    session.setAttribute("cart", cart);
    response.sendRedirect("cart_list.jsp");
    //this.getServletContext().getRequestDispatcher("/cart_list.jsp").forward(request, response);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
      

  7.   

    不好意思了,用blank误导你了,让你想到_blank了。
    不是_blank,是个别的什么任意的名字就可以的。
      

  8.   

    var win
    function open(){
    if(!win)
       win = window.open("http://www.baidu.com");
    }else{
       win.window.location.reload();
    }
    来判断某个页面是否已经打开,如果已经打开就刷新
      

  9.   

         刚才试了下,真的可以啊!但不知道为什么是这样的,我将target属性的值设置为:"asdf"都行,不过问题是解决了,但不知道这是什么原因?盼能进一步解答!
          11楼正解,谢谢啦!
          
      

  10.   

    指定target的,浏览器会找这个target(标签页),存在则不新开。就是你要的。看html书的时候细心点就知道了。^-^
      

  11.   

    如果判断的那个页面没有打开,就自动跳转到那个页面,怎么改代码?这代码是放在<script></script>中的吗???我只需要普通的HTML代码实验.请高手们指示.