0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[サーブレット&JSP]formからcheckボタンでまとめて削除する

Posted at

今回は前回の続きでformで入力して一覧に表示させた後に、さらにチェックボタンを使用してまとめて削除を行う。

前回の続きになっているので、先にそちらの記事をみるとわかりやすいかもしれません↓

[サーブレット&JSP]ArrayListを使って文字を表示させる

1点注意点といたしましては、スコープをrequestからsessionに変更しております。

form入力

スクリーンショット 2022-06-26 11.16.59.png

削除したい人を複数選択

スクリーンショット 2022-06-26 11.22.49.png

複数削除完了

スクリーンショット 2022-06-26 11.23.20.png

display.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="beans.User,java.util.ArrayList" %>
    <%ArrayList<User> userList = (ArrayList<User>)session.getAttribute("userlist");%>
   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="marutisakujyo" method="get">
<% for(int i = 0; i < userList.size(); i++) { %>
<%out.print(i+1); %>
<%= userList.get(i).getName()%>
<input type="checkbox" name="check" value="<%=i%>"><br>

<% } %>
<input type="submit" value="まとめて削除">
</form>


</body>
</html>

1. formで入力された値の送信先はmarutisakujyoサーブレットのdoget
2. type属性値が今回の場合はcheckboxなので、value属性を書いて選択された項目がサーブレットの方に送られるようにする

marutisakujyo.java
package サーブレット;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.User;

/**
 * Servlet implementation class marutisakujyo
 */
@WebServlet("/marutisakujyo")
public class marutisakujyo extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public marutisakujyo() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		String[] check = request.getParameterValues("check");
		
		HttpSession session = request.getSession();
		ArrayList<User> userList = (ArrayList<User>)session.getAttribute("userlist");
		
		//チェックボックスにチェックがついたものを削除する
		if(check != null) {
			for(int j = check.length-1; j >=0; j--) {
				if(check[j] != null) {
					int a = Integer.parseInt(check[j]);
					userList.remove(a);
				}
			}
		}
		request.setAttribute("userlist",userList);
		RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

  }

}

1. formからcheckされた値を配列値で取得したいので、getParameterValuesメソッドを使用する
2. セッションに保存されたいるArrayListを呼び出す
3. チェックボックスにチェックがついたものを削除する。その時にcheck.length-1をしないとArrayIndexOutOfBoundsException配列の添字が範囲外のエラーが出ます。
4. checkボタンにチェックがついた値をInteger.parseIntメソッドで文字列から数値型に変更する。
5. removeで削除する。display.jspへフォワードする

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?