Système de gestion de clones / tâches Java / Twitter ⑤ Ajouter une fonction d'édition

introduction

Je voudrais écrire un article pour ceux qui écrivent des applications pour la première fois en utilisant 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 Mysql5.7

table des matières

  1. Créer une vue
  2. Créez DAO
  3. Créer un servlet
  4. Prochain avis

Créer une vue

Cette fois, nous allons créer une page d'édition. Il est très similaire à l'écran d'enregistrement des tâches que j'ai écrit dans l'article précédent, veuillez donc le vérifier facilement. Pour l'édition de tâches, les utilisateurs connectés peuvent modifier des éléments autres que ceux publiés par eux-mêmes.

task-update.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Édition de tâches</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-insert.css">
</head>
<body>
<jsp:include page="header.jsp"/>
<jsp:useBean id="task" scope="session" class="model.entity.TaskBean"/>

	<div class="contain">
		<h3>Enregistrement des tâches</h3>
		<form action="task-update-servlet" method="post">
			<table class="form-table" border="1">
	    		<tbody>
		    		<tr>
					    <th>Nom de la tâche</th>
					        <td>
					        <div class="input-key">
								<input type="text" class="form-control" name="task_name" value="<jsp:getProperty property="task_name" name="task"/>">
							</div>
					    </td>
				   	</tr>
			       	<tr>
			        	<th>Catégorie</th>
			        	<td>
					        <div class="input-key">
					      		<select class="form-control" name="category_id">
        							<option value="<jsp:getProperty property="category_id" name="task"/>">Pas de changement</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>Date limite</th>
					        <td>
					        <div class="input-key">
								<input type="date" name="limit_date" class="form-control" value="<jsp:getProperty property="limit_date" name="task"/>">
							</div>
					    </td>
				   	</tr>
			        <tr>
					    <th>statut</th>
				        <td>
					        <div class="input-key">
				      			<select class="form-control" name="status_code">
       								<option value="<jsp:getProperty property="status_code" name="task"/>">Pas de changement</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>Note</th>
					        <td>
					        <div class="input-key">
								<input type="text" class="form-control" name="memo" value="<jsp:getProperty property="memo" name="task"/>">
							</div>
					    </td>
				   	</tr>
				    <tr>
				        <th>Date de création</th>
				        <td><jsp:getProperty property="create_datetime" name="task"/><input type="hidden" name="create_datetime" value="<jsp:getProperty property="create_datetime" name="task"/>"></td>
			        </tr>
			        <tr>
				        <th>
				        	<input type="hidden" name="task_id" value="<jsp:getProperty property="task_id" name="task"/>">
			        		<input type="hidden" name="version" value='<jsp:getProperty property="version" name="task"/>'>
			        		<input type="submit" value="Mise à jour" class="input-submit"></th>
				        <td></td>
			        </tr>
			    </tbody>
			</table>
	    </form>
	</div>
</body>
</html>

De plus, nous préparerons un écran lorsque l'édition sera réussie. Le contenu modifié est affiché ici.

task-update-comp.java


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="model.entity.TaskBean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mise à jour terminée</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-edit-failure.css">
</head>
<body>
<jsp:useBean id="task" class="model.entity.TaskBean" scope="session"/>
<%
String category_name = (String)request.getAttribute("category_name");
String status_name = (String)request.getAttribute("status_name");
%>
	<jsp:include page="header.jsp"/>
	<div class="contain">
		<div class="box">
		  	<h3>Mise à jour de la tâche terminée</h3>
		  	<p>Mis à jour avec le contenu suivant</p>
		  	<hr>
		 	<p>
Nom de la tâche:<jsp:getProperty property="task_name" name="task"/><br>
Catégorie:<jsp:getProperty property="category_id" name="task"/>:<%=category_name %><br>
Date limite:<jsp:getProperty property="limit_date" name="task"/><br>
statut:<jsp:getProperty property="status_code" name="task"/>:<%=status_name %><br>
Remarque:<jsp:getProperty property="memo" name="task"/><br>
		 	 </p>
	 	 </div>
	</div>
</body>
</html>

Préparez également un écran en cas d'échec Afficher la raison de l'échec

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.List"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Échec de la mise à jour de la tâche</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-edit-failure.css">
</head>
<body>
<%
List<String> error = (List<String>)request.getAttribute("error");
%>
	<jsp:include page="header.jsp"/>
	<div class="contain">
		<div class="box">
			<h3>Échec de la mise à jour de la tâche</h3>
			<hr>
			<p>*Les causes suivantes sont possibles</p>
		    <ul>
<%for(String er : error){ %>
		  		<li><%=er %></li>
<%} %>
		  	</ul>
		</div>
	</div>
</body>
</html>

Créer un DAO

Création d'une méthode de mise à jour des tâches et d'une méthode de récupération de la tâche spécifiée

model.dao.TaskDAO.java


 /**
	  *Méthode de mise à jour des tâches
	  * @param task
	  * @return sum
	  * @throws SQLException
	  * @throws ClassNotFoundException
	  */
	 public int updateTask(TaskBean task) throws SQLException, ClassNotFoundException {
		 String sql = "update t_task set task_name = ?, category_id = ?, limit_date = ?, status_code = ?, memo = ?, version = version + 1 where task_id = ? and version = ?";
		 int sum = 0;
		 try(Connection con = ConnectionManager.getConnection();
				 PreparedStatement pstmt = con.prepareStatement(sql)){
			 pstmt.setString(1, task.getTask_name());
			 pstmt.setInt(2, task.getCategory_id());
			 pstmt.setDate(3, task.getLimit_date());
			 pstmt.setString(4, task.getStatus_code());
			 pstmt.setString(5, task.getMemo());
			 pstmt.setInt(6, task.getTask_id());
			 pstmt.setInt(7, task.getVersion());
			 sum = pstmt.executeUpdate();
		 }
		 return sum;
	 }

/**
	 * task_Obtenir une tâche spécifique avec id comme argument
	 * @param task_id
	 * @return
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public TaskBean getSpecificTask(int task_id) throws SQLException, ClassNotFoundException {
		 TaskBean task = new TaskBean();
		 String sql = "select * from t_task where task_id = ?";
		 try(Connection con = ConnectionManager.getConnection();
				 PreparedStatement pstmt = con.prepareStatement(sql);){
			 pstmt.setInt(1, task_id);
			 ResultSet res = pstmt.executeQuery();
			 //Stocker les informations de colonne dans l'objet de tâche
			 while(res.next()) {
				task.setTask_id(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"));
				task.setVersion(res.getInt("version"));
			 }
		 }
		 return task;
	 }

Créer un servlet

Enregistrez les informations de tâche sélectionnées dans l'écran de liste dans l'étendue de la session et affichez / modifiez-les à la destination du transfert (task-update.java).

servlet.TaskUpdateDetailServlet.java


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//Obtenir les paramètres de la demande
		request.setCharacterEncoding("UTF-8");
		int task_id = Integer.parseInt(request.getParameter("task_id"));

		TaskDAO dao = new TaskDAO();
		TaskBean task = new TaskBean();

		try {
			//Enregistrer la tâche spécifiée dans l'étendue de la session
			task = dao.getSpecificTask(task_id);
			HttpSession session = request.getSession();
			session.setAttribute("task", task);
			RequestDispatcher rd = request.getRequestDispatcher("task-update.jsp");
			rd.forward(request, response);
		}catch(SQLException | ClassNotFoundException e) {
			e.printStackTrace();
		}

Après l'édition, le traitement DB et la transition d'écran sont effectués avec le servlet suivant

servlet.TaskUpdateServket.java


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

		TaskDAO taskdao = new TaskDAO();
		CategoryDAO categorydao = new CategoryDAO();
		StatusDAO statusdao = new StatusDAO();

		//Obtenir les paramètres de la demande
		request.setCharacterEncoding("UTF-8");
		int task_id = Integer.parseInt(request.getParameter("task_id"));
		String task_name = request.getParameter("task_name");
		String category_id_str = request.getParameter("category_id");
		String limit_date_check = request.getParameter("limit_date");
		String status_code = request.getParameter("status_code");
		String memo = request.getParameter("memo");
		int version = Integer.parseInt(request.getParameter("version"));

		//Génération de liste pour enregistrer l'affichage des erreurs
		List<String> error = new ArrayList<String>();

		//vérification de session
		HttpSession session = request.getSession();
		boolean sessioncheck = (boolean)session.getAttribute("login");
		if(!sessioncheck) {
			error.add("Veuillez vous connecter et enregistrer la tâche");
		}

		//Vérifier les omissions d'entrée
		if(task_name.equals("")) {
			error.add("Le nom de la tâche est vide");
		}
		boolean limit_check;
		limit_date_check = limit_date_check.replace('-', '/');
	    DateFormat format = DateFormat.getDateInstance();
		format.setLenient(false);
		try {
			format.parse(limit_date_check);
			 limit_check = true;
		} catch(Exception e) {
			limit_check = false;
		}
		if(!limit_check) {
			error.add("Veuillez saisir la date de la date limite");
		}

		request.setAttribute("error", error);

		if(task_name != "") {
			try {
				//Convertit les catégories et les délais (de type non-String) qui ne peuvent pas être reçus selon les paramètres
				int category_id = Integer.parseInt(category_id_str);
				Date limit_date = Date.valueOf(request.getParameter("limit_date"));

				//Faire correspondre la version actuelle avec la version au moment de l'acquisition de l'enregistrement
				int current_version = taskdao.getVersion(task_id);
				if(current_version != version) {
					error.add("Cette tâche a été réorganisée par d'autres");
					request.setAttribute("error", error);
					RequestDispatcher rd = request.getRequestDispatcher("task-update-failure.jsp");
					rd.forward(request, response);
				}

				//Définir la valeur de l'objet de tâche
				TaskBean task = new TaskBean();
				task.setTask_name(task_name);
				task.setCategory_id(category_id);
				task.setLimit_date(limit_date);
				task.setStatus_code(status_code);
				task.setMemo(memo);
				task.setTask_id(task_id);
				task.setVersion(version);

				//Traitement de la base de données par méthode de mise à jour
				taskdao.updateTask(task);

				//Enregistrer la tâche dans l'étendue de la session
				session.setAttribute("task", task);

				//Enregistrer le nom de la catégorie et le nom de l'état pour demander l'étendue
				String category_name = categorydao.getCategoryName(task.getCategory_id());
				String status_name = statusdao.getStatusName(task.getStatus_code());
				request.setAttribute("category_name", category_name);
				request.setAttribute("status_name", status_name);

				RequestDispatcher rd = request.getRequestDispatcher("task-update-comp.jsp");
				rd.forward(request, response);
			} catch(SQLException | ClassNotFoundException | IllegalArgumentException e) {
				RequestDispatcher rd = request.getRequestDispatcher("task-update-failure.jsp");
				rd.forward(request, response);
			}
		}else {
			RequestDispatcher rd = request.getRequestDispatcher("task-update-failure.jsp");
			rd.forward(request, response);
			}
	}

Aperçu de la prochaine fois

Cette fois, nous avons implémenté la fonction d'édition des tâches. La prochaine fois, nous mettrons en œuvre la fonction de suppression de tâches.

Recommended Posts

Système de gestion de clones / tâches Java / Twitter ⑤ Ajouter une fonction d'édition
Système de gestion de clone / tâches Java / Twitter ⑥ Ajouter une fonction de suppression
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 ③ Ajout d'une fonction d'enregistrement de tâches
Clone Java / Twitter / système de gestion des tâches ④ Afficher la liste des tâches
Système de gestion des tâches / clones Java / Twitter ① Créer une base de données
Java (add2)
Java (ajouter)