セッションとJSPでTODOリストを実装 #4 | Java

Java

前回の続きです。

ファイル構成と今回のゴール

⚫︎ファイル構成

⚫︎ゴール(TODOリストのNo.2を編集し更新する)

実装

package controller;

import java.io.IOException;
import java.util.List;

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 model.Task;

@WebServlet("/edit")
public class EditServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		int i = Integer.parseInt(request.getParameter("idx"));
		
		HttpSession session = request.getSession();
		List<Task> todoList = (List<Task>) session.getAttribute("todoList");
		
		if(todoList != null && i >= 0 && i < todoList.size()) {
			Task reTask = todoList.get(i);
			session.setAttribute("reTask", reTask);
		}
		//何番目の編集か
		session.setAttribute("i", i);
		
		RequestDispatcher req = request.getRequestDispatcher("edit.jsp");
		req.forward(request,response);		
	}
}

package controller;

import java.io.IOException;
import java.util.List;
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 model.Task;


@WebServlet("/update")
public class UpdateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String summary = request.getParameter("summary");
		String status = request.getParameter("status");
		int i = Integer.parseInt(request.getParameter("i")); //何番目のタスクをupdateするのか
		
		Task newTask = new Task(summary, status);
		HttpSession session = request.getSession();
		
		List<Task> todoList = (List<Task>) session.getAttribute("todoList");

		// 新しいタスクをリストに追加
        todoList.set(i, newTask);

        // 更新されたリストをセッションに保存
        session.setAttribute("todoList", todoList);
		
		RequestDispatcher req = request.getRequestDispatcher("select.jsp");
		req.forward(request,response);
	}
}

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="model.Task" %>
<% Task reTask = (Task) session.getAttribute("reTask"); %>
<% int i = (int) session.getAttribute("i"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>編集</title>
</head>
<body>
<h2>編集画面</h2>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
	<form action="update" method="post">
		概要:<input type="textarea" name="summary" rows="3" value="<%= reTask.getSummary() %>"></textarea><br>
		ステータス:<select name="status">
          <!-- "selected"を付与するかどうか判定 -->
		  <option value="todo" <%= "todo".equals(reTask.getStatus()) ? "selected" : ""%>>Todo</option>
		  <option value="doing" <%= "doing".equals(reTask.getStatus()) ? "selected" : ""%>>Doing</option>
		  <option value="done" <%= "done".equals(reTask.getStatus()) ? "selected" : ""%>>Done</option>
		</select><br>
		<input type="hidden" name="i" value=<%=i %>>
		<input type="submit" class="btn btn-success" value="更新"></input>
	</form>
	<br>
	<a href="select.jsp">戻る</a>
</body>
</html>

メモ

"todo".equals(reTask.getStatus()) ? "selected" : ""
//reTask.getStatus() の値が "todo" であれば "selevted"を設定、違えば ""(ブランク)を設定する

//ArrayListの宣言
ArrayList< 型 > 変数名 = new ArrayList<>();

//リストのint番目の要素を上書きする
変数名.set(int,型);

きせる

タクシー運転手を1年経験し、畑違いのエンジニアに転職。エンジニアに向いていないと思いつつ現在3年目。

きせるをフォローする
スポンサーリンク
Javaプログラミング