2017-11-28 13 views
-1

サーブレットに複数のリクエストが入ってきたときにデータを追加できるセッションを作成したい場合は、最初にセッションがヌルかどうかを確認します。セッションを取得し、初期属性をそこに格納します。これは私がサーブレットへの最初のリクエストで望んでいるものです。それ以降のリクエストについては、セッションが存在する必要があり、セッション内の属性にデータを変更します。しかし、私のelse条件では、私の属性は存在しません。複数のリクエストを通じてセッションを持続させる方法を教えてください。ありがとう複数のリクエストでHTTPセッションに属性が保存されない

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 
     int quantity = 0; 
     Item[] item = new Item[9]; 
     int currRow = Integer.parseInt(request.getParameter("rowNum")); 

     HttpSession session = request.getSession(false); 
     if (session == null) { 
      session = request.getSession(); 
      for (int i = 0; i < 9; i++) { 
       item[i] = new Item(); 
       item[i].setID(request.getParameter("ID" + (i + 1))); 
       item[i].setPrice(Double.parseDouble(request.getParameter("p" + (i + 1)))); 
       session.setAttribute(Integer.toString((i + 1)), item[i]); 

      } 
      quantity = Integer.parseInt(request.getParameter("q" + currRow)); 
      Item currItem = (Item) session.getAttribute(Integer.toString(currRow)); 
      currItem.setQuantity(currItem.getQuantity() + quantity); 
      session.setAttribute(Integer.toString(currRow), currItem); 
     } else { 

      if (null == session.getAttribute("2")) { 
       out.println("not exist"); 
      } else { 
       out.println("exist"); 
      } 
     } 

    } 
} 

FIX:代わりに(偽)でrequest.getSessionの

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 
     int quantity = 0; 
     Item[] item = new Item[9]; 
     int currRow = Integer.parseInt(request.getParameter("rowNum")); 

     HttpSession session = request.getSession(); 
     Item currItem; 

     if (session.getAttribute("1") == null) { 
      for (int i = 0; i < 9; i++) { 
       item[i] = new Item(); 
       item[i].setID(request.getParameter("ID" + (i + 1))); 
       item[i].setPrice(Double.parseDouble(request.getParameter("p" + (i + 1)))); 
       session.setAttribute(Integer.toString((i + 1)), item[i]); 
      } 
      quantity = Integer.parseInt(request.getParameter("q" + currRow)); 
      currItem = (Item) session.getAttribute(Integer.toString(currRow)); 
      currItem.setQuantity(currItem.getQuantity() + quantity); 
     } else { 
      quantity = Integer.parseInt(request.getParameter("q" + currRow)); 
      currItem = (Item) session.getAttribute(Integer.toString(currRow)); 
      currItem.setQuantity(currItem.getQuantity() + quantity); 
     } 
} 

答えて

1

あなただけでrequest.getSessionを(使用することができます)。その後のヌルチェック。

存在しない場合は新しいものを作成し、見つかった場合は既存のものを使用します。 The java docs for HtpServletRequest

+0

このソリューションは実際にはうまくいきましたが、なぜ私のコードでは理解できません。 –

関連する問題