-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);
}
}
このソリューションは実際にはうまくいきましたが、なぜ私のコードでは理解できません。 –