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

## 今回は前回の続きでformで入力して一覧に表示させた後に、さらにチェックボタンを使用してまとめて削除を行う。
### 前回の続きになっているので、先にそちらの記事をみるとわかりやすいかもしれません↓
#### [[サーブレット&JSP]ArrayListを使って文字を表示させる](https://qiita.com/take14/items/3c2fee036bc0731785d9)

**1点注意点といたしましては、スコープを<font color="Red">requestからsession</font>に変更しております。**


### form入力
![スクリーンショット 2022-06-26 11.16.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675188/a5924706-13cb-3083-4770-2f1964b4293e.png)

### 削除したい人を複数選択
![スクリーンショット 2022-06-26 11.22.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675188/06f15458-cc44-7c69-6ca3-6916fd239fc7.png)

### 複数削除完了
![スクリーンショット 2022-06-26 11.23.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675188/fee8f4eb-e87d-5cf9-80b5-38f603c8dd94.png)

```java: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属性を書いて選択された項目がサーブレットの方に送られるようにする***

```java: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をしないと<font color="Red">ArrayIndexOutOfBoundsException</font>配列の添字が範囲外のエラーが出ます。***
***4. checkボタンにチェックがついた値を<font color="Red">Integer.parseIntメソッド</font>で文字列から数値型に変更する。***
***5. removeで削除する。display.jspへフォワードする***