Clone Java / Twitter / système de gestion des tâches ④ Afficher la liste des tâches

introduction

J'aimerais écrire un article pour ceux qui écrivent des applications pour la première fois avec Java. Nous vous serions reconnaissants de bien vouloir l'utiliser comme référence pour créer des thèmes de formation pour votre portefeuille et votre entreprise. Cette fois, nous allons créer un gestionnaire de tâches. En appliquant cela, il peut également être utilisé pour créer des clones Twitter.

Je publierai des articles pour chaque fonction de l'application.

  1. Créer une base de données
  2. Fonction de connexion
  3. Fonction d'enregistrement des tâches
  4. Affichage de la liste -Fonction de tri -Fonction de recherche
  5. Fonction d'édition
  6. Fonction de suppression
  7. Contrôle exclusif

Environnement d'exécution

eclipse4.16.0 Tomcat9 Java11

Objectif

  1. Créer une vue
  2. Créer DAO (affichage / tri de liste)
  3. Création d'un servlet (listage / tri)
  4. Créer DAO (fonction de recherche)
  5. Création d'un servlet (fonction de recherche)
  6. Prochain avis

Créer une vue

Créer un formulaire de recherche et un tableau de liste de tâches

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.List, model.entity.TaskBean, model.entity.UserBean, model.dao.UserDAO, model.dao.CategoryDAO, model.dao.StatusDAO"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Liste de tâches</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-list.css">
</head>
<body>
<%
List<TaskBean> tasklist = (List<TaskBean>) request.getAttribute("tasklist");
UserDAO userdao = new UserDAO();
CategoryDAO categorydao = new CategoryDAO();
StatusDAO statusdao = new StatusDAO();
String error = (String)request.getAttribute("error");
%>
<!-- *****************Formulaire de recherche**********************-->
<jsp:include page="header.jsp"/>
	<div class="contain">
		<h3>Recherche pressée</h3>
		<form action="task-search-servlet" method="post">
		<table class="form-table search-table">
    		<tbody>
	    		<tr>
				    <th>Affiner par nom de tâche</th>
				        <td>
				        <div class="search-key">
							<input type="text" class="form-control" name="task_name">
						</div>
				    </td>
			   	</tr>
		       	<tr>
		        	<th>Affiner par catégorie</th>
		        	<td>
				        <div class="search-key">
				      		<select class="form-control" name="category_id">
				        		<option selected>Choose...</option>
				        		<option value="1">Nouveau produit A: Projet de développement</option>
				        		<option value="2">Produit existant B:Projet d'amélioration</option>
				      		</select>
					    </div>
				    </td>
			    </tr>
		        <tr>
				        <th>Affiner par statut</th>
				        <td>
				        <div class="search-key">
			      			<select class="form-control" name="status_code">
			        			<option selected>Choose...</option>
			        			<option value="00">pas encore commencé</option>
			        			<option value="50">Début</option>
			        			<option value="99">Terminé</option>
			     		 	</select>
			    		</div>
			        </td>
		        </tr>
			    <tr>
			        <th><input type="submit" value="Chercher" class="search-button"></th>
			        <td>
			        </td>
		        </tr>
		    </tbody>
		</table>
	  	</form>
<!-- *****************Tableau de la liste des tâches (trier par bouton ▼ sans tableau)*********-->  
		<h3>Liste de tâches</h3>
<%if(error != null){ %>
		<p class="error"><%=error %></p>
<%} %>
		<div class="table-wrapper">
			<table class="list-table" border="1">
		  		<thead>
					<tr class="table-header">
						<th class="fixed01">
							<div class="title">ID de tâche</div>
							<div class="sort-box" >
								<form action="task-list-servlet" method="post" class="sort-form">
									<input type="submit" value="▲" class="sort">
								</form>
								<form action="task-order-by-id-desc" method="post" class="sort-form">
									<input type="submit" value="▼" class="sort">
								</form>
							</div>
						</th>
						<th class="fixed01"><div class="title">Nom de la tâche</div></th>
						<th class="fixed01">
							<div class="title">Catégorie</div>
							<form action="task-order-by-category-servlet" method="post" class="sort-form">
								<input type="submit" value="▲" class="sort">
							</form>
							<form action="task-order-by-category-desc" method="post" class="sort-form">
								<input type="submit" value="▼" class="sort">
							</form>
						</th>
						<th class="fixed01">
							<div class="title">Date limite</div>
							<form action="task-order-by-limit-servlet" method="post" class="sort-form">
								<input type="submit" value="▲" class="sort">
							</form>
							<form action="task-order-by-limit-desc" method="post" class="sort-form">
								<input type="submit" value="▼" class="sort">
							</form>
						</th>
						<th class="fixed01">
							<div class="title">Utilisateur</div>
							<form action="task-order-by-user-servlet" method="post" class="sort-form">
								<input type="submit" value="▲" class="sort">
							</form>
							<form action="task-order-by-user-desc" method="post" class="sort-form">
								<input type="submit" value="▼" class="sort">
							</form>
						</th>
						<th class="fixed01">
							<div class="title">statut</div>
							<form action="task-order-by-status-servlet" method="post" class="sort-form">
								<input type="submit" value="▲" class="sort">
							</form>
							<form action="task-order-by-status-desc" method="post" class="sort-form">
								<input type="submit" value="▼" class="sort">
							</form>
						</th>
						<th class="title fixed01">Note</th>
						<th class="title fixed01">Date d'enregistrement</th>
						<th class="title fixed01">Mettre à jour la date et l'heure</th>
						<th colspan="3" class="title fixed01">La gestion des tâches</th>
					</tr>
				</thead>
				<tbody>
	<%
	for(TaskBean task : tasklist){
		String user_name = userdao.getUserName(task.getUser_id());
		String category_name = categorydao.getCategoryName(task.getCategory_id());
		String status_name = statusdao.getStatusName(task.getStatus_code());
	%>
					<tr >
						<td class="parameter"><%=task.getTask_id() %></td>
						<td class="parameter"><%=task.getTask_name() %></td>
						<td class="parameter"><%=task.getCategory_id() %>:<%=category_name %></td>
						<td class="parameter"><%=task.getLimit_date() %></td>
						<td class="parameter"><%=user_name %></td>
						<td class="parameter"><%=task.getStatus_code() %>:<%=status_name %></td>
						<td class="parameter"><%=task.getMemo() %></td>
						<td class="parameter"><%=task.getCreate_datetime() %></td>
						<td class="parameter"><%=task.getUpdate_datetime() %></td>
						<td class="parameter">
							<form action="task-update-detail-servlet" method="post">
								<input type="hidden" name="task_id" value="<%=task.getTask_id() %>">
								<button type="submit" class="task-button">mise à jour</button>
							</form>
						</td>
						<td class="parameter">
							<form action="task-delete-detail-servlet" method="post">
								<input type="hidden" name="task_id" value="<%=task.getTask_id() %>">
								<button type="submit" class="task-button">Effacer</button>
							</form>
						</td>
						<td class="parameter">
							<form action="comment-detail-servlet" method="post">
								<input type="hidden" name="task_id" value="<%=task.getTask_id() %>">
								<button type="submit" class="task-button">commentaire</button>
							</form>
						</td>
					</tr>
	<%
	}
	%>
				</tbody>
			</table>
		</div>
	</div>
</body>
</html>

Création DAO (affichage / tri de liste)

Vous pouvez facilement créer une instruction SQL pour le tri en modifiant la partie t_task de cette instruction SQL en category_id ou limit_date. Cette fois, nous avons rendu possible le tri par task_id, limit_date, category_id, status_code, user_id.

model.dao.TaskDAO.java


	/**
	 *Liste des tâches
	 * @return tasklist
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	//Par ID de tâche
	public List<TaskBean> getTaskList() throws SQLException, ClassNotFoundException{
		String sql = "select * from t_task";
		List<TaskBean> tasklist = new ArrayList<TaskBean>();

		try(Connection con = ConnectionManager.getConnection();
				Statement stmt = con.createStatement();
				ResultSet res = stmt.executeQuery(sql)){
				//Les colonnes SQL acquises sont stockées dans l'objet de tâche dans l'ordre. Enfin ajouter à la liste des tâches
				while(res.next()) {
					TaskBean task = new TaskBean();
					task.setTask_id(res.getInt("task_id"));
					task.setTask_name(res.getString("task_name"));
					task.setCategory_id(res.getInt("category_id"));
					task.setLimit_date(res.getDate("limit_date"));
					task.setUser_id(res.getString("user_id"));
					task.setStatus_code(res.getString("status_code"));
					task.setMemo(res.getString("memo"));
					task.setCreate_datetime(res.getTimestamp("create_datetime"));
					task.setUpdate_datetime(res.getTimestamp("update_datetime"));

					tasklist.add(task);
				}
		}
		return tasklist;
	}
	//Inverser
		public List<TaskBean> getTaskListOrderByIdDesc() throws SQLException, ClassNotFoundException{
			String sql = "select * from t_task order by task_id desc";
			List<TaskBean> tasklist = new ArrayList<TaskBean>();
			try(Connection con = ConnectionManager.getConnection();
					Statement stmt = con.createStatement();
					ResultSet res = stmt.executeQuery(sql)){
					//Les colonnes SQL acquises sont stockées dans l'objet de tâche dans l'ordre. Enfin ajouter à la liste des tâches
					while(res.next()) {
						TaskBean task = new TaskBean();
						task.setTask_id(res.getInt("task_id"));
						task.setTask_name(res.getString("task_name"));
						task.setCategory_id(res.getInt("category_id"));
						task.setLimit_date(res.getDate("limit_date"));
						task.setUser_id(res.getString("user_id"));
						task.setStatus_code(res.getString("status_code"));
						task.setMemo(res.getString("memo"));
						task.setCreate_datetime(res.getTimestamp("create_datetime"));
						task.setUpdate_datetime(res.getTimestamp("update_datetime"));

						tasklist.add(task);
					}
			}
			return tasklist;
		}

Création d'un servlet (listage / tri)

Tout d'abord, il s'affiche lors de la transition depuis l'écran de menu. La liste ne s'affichera que si vous êtes connecté.

servlet.TaskListServlet.java


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		TaskDAO dao = new TaskDAO();

		try {
			HttpSession session = request.getSession();
			boolean logincheck = (Boolean)session.getAttribute("login");
			if(logincheck) {
				//Enregistrez toutes les tâches acquises pour demander l'étendue
				List<TaskBean> tasklist = dao.getTaskList();
				request.setAttribute("tasklist", tasklist);

				//Vers l'avant
				RequestDispatcher rd = request.getRequestDispatcher("task-list.jsp");
				rd.forward(request, response);
			}

		} catch(SQLException | ClassNotFoundException | NullPointerException e) {
			e.printStackTrace();
			RequestDispatcher rd = request.getRequestDispatcher("login.html");
			rd.forward(request, response);
		}

Voici un exemple de servlet envoyé lorsque chaque bouton de tri est enfoncé. Créez un servlet pour chaque méthode de tri définie dans TaskDAO.java. Par exemple, il s'agit d'un servlet qui obtient les tâches dans l'ordre décroissant de task_id.

TaskOrderByIdDesc.java


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		TaskDAO dao = new TaskDAO();
		List<TaskBean> tasklist = null;
		try {
//Changez simplement la méthode utilisée ici.
			tasklist = dao.getTaskListOrderByIdDesc();
		} catch(SQLException | ClassNotFoundException e) {
			e.printStackTrace();
		}

		request.setAttribute("tasklist", tasklist);
		RequestDispatcher rd = request.getRequestDispatcher("task-list.jsp");
		rd.forward(request, response);
	}

Ceci termine l'affichage de la liste des tâches et la fonction de tri.

Ensuite, nous implémenterons la fonction de recherche.

Création DAO (fonction de recherche)

La fonction de recherche pourra affiner par nom_tâche, id_catégorie, code_état.

	/**
	 *Méthode de recherche
	 * @param task_name
	 * @param category_id
	 * @param status_code
	 * @return
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public List<TaskBean> searchTask(String task_name, int category_id, String status_code) throws SQLException, ClassNotFoundException{
		//Instruction SQL (utilisée lorsque tous les formulaires de recherche sont remplis)
		String sql = "select * from t_task where task_name like ? and category_id = ? and status_code = ?";
		//Créer une instruction SQL qui utilise uniquement les éléments sélectionnés pour chaque élément de recherche
		if(category_id == 0 && status_code == "0") {
			sql = "select * from t_task where task_name like ?";
		}else if(category_id ==0) {
			sql = "select * from t_task where task_name like ? and status_code = ?";
		}else if(status_code == "0") {
			sql = "select * from t_task where task_name like ? and category_id = ?";
		}

		List<TaskBean> tasklist = new ArrayList<TaskBean>();
		try(Connection con = ConnectionManager.getConnection();
				PreparedStatement pstmt = con.prepareStatement(sql)){
      //Comme précédemment, pour chaque élément de recherche, attribuez et spécifiez des arguments sous une forme qui correspond à l'instruction SQL qui utilise uniquement les éléments sélectionnés.
			if(category_id == 0 && status_code == "0") {
				pstmt.setString(1, task_name);
			}else if(category_id ==0) {
				pstmt.setString(1, task_name);
				pstmt.setString(2, status_code);
			}else if(status_code == "0") {
				pstmt.setString(1, task_name);
				pstmt.setInt(2, category_id);
			}else {
				pstmt.setString(1, task_name);
				pstmt.setInt(2, category_id);
				pstmt.setString(3, status_code);
			}

			ResultSet res = pstmt.executeQuery();
			//Les colonnes SQL acquises sont stockées dans l'objet de tâche dans l'ordre. Enfin ajouter à la liste des tâches
			while(res.next()) {
				TaskBean task = new TaskBean();
				task.setTask_id(res.getInt("task_id"));
				task.setTask_name(res.getString("task_name"));
				task.setCategory_id(res.getInt("category_id"));
				task.setLimit_date(res.getDate("limit_date"));
				task.setUser_id(res.getString("user_id"));
				task.setStatus_code(res.getString("status_code"));
				task.setMemo(res.getString("memo"));
				task.setCreate_datetime(res.getTimestamp("create_datetime"));
				task.setUpdate_datetime(res.getTimestamp("update_datetime"));

				tasklist.add(task);
			}
		}
		return tasklist;
	}

Création d'un servlet (fonction de recherche)

Veuillez essayer tout en regardant les commentaires.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		TaskDAO taskdao = new TaskDAO();
		List<TaskBean> tasklist = new ArrayList<TaskBean>();

		//Obtenir les paramètres de la demande
		request.setCharacterEncoding("UTF-8");
		String task_name = request.getParameter("task_name");
		String category_id_str = request.getParameter("category_id");
		String status_code = request.getParameter("status_code");

		//Vérifier les omissions d'entrée
		if(category_id_str.equals("Choose...")) {
			category_id_str = "0";
		}
		if(status_code.equals("Choose...")) {
			status_code = "0";
		}

		task_name = "%" + task_name + "%";

		//category_Renvoyer l'id au type int
		int category_id = Integer.parseInt(category_id_str);

		try {
			//Recherche par contenu raffiné
			tasklist = taskdao.searchTask(task_name, category_id, status_code);

			//Si la liste des tâches est 0, un écran d'erreur s'affiche.
			if(tasklist.size() == 0) {
				String error = "Il n'y a pas de résultat";
				request.setAttribute("error", error);
			}

		}catch(SQLException | ClassNotFoundException e) {
			e.printStackTrace();
			RequestDispatcher rd = request.getRequestDispatcher("task-list-servlet");
			rd.forward(request, response);
		}
		request.setAttribute("tasklist", tasklist);
		RequestDispatcher rd = request.getRequestDispatcher("task-list.jsp");
		rd.forward(request, response);
	}
  1. Prochain avis Cette fois, nous avons travaillé à afficher la liste des tâches et à la traiter. La prochaine fois, je résumerai les fonctions d'édition de tâches qui peuvent être transférées à partir de la liste des tâches.

Recommended Posts

Clone Java / Twitter / système de gestion des tâches ④ Afficher la liste des tâches
Système de gestion de clone / tâches Java / Twitter ⑥ Ajouter une fonction de suppression
Système de gestion des tâches / clones Java / Twitter ① Créer une base de données
Système de gestion des tâches / clone Java / Twitter (2) Ajouter une fonction de connexion
Système de gestion de clones / tâches Java / Twitter ⑤ Ajouter une fonction d'édition
Système de gestion de clones / tâches Java / Twitter ③ Ajout d'une fonction d'enregistrement de tâches
Clonez la liste Java.
Mémorandum Java (liste)