Système de gestion de clones / tâches Java / Twitter ③ Ajout d'une fonction d'enregistrement de 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

table des matières

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

Créer une vue

Il s'agit d'un formulaire de saisie courant.

task-insert.jsp


<body>
<!-- header.jsp sera créé en dernier-->
<jsp:include page="header.jsp"/>
	<div class="contain">
		<h3>Enregistrement des tâches</h3>
<!-- task-insert-Passez chaque paramètre d'entrée au servlet-->
		<form action="task-insert-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" size="60" placeholder="Entrez s'il vous plait">
							</div>
					    </td>
				   	</tr>
			       	<tr>
			        	<th>Catégorie</th>
			        	<td>
					        <div class="input-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>Date limite</th>
					        <td>
					        <div class="input-key">
								<input type="date" name="limit_date" class="form-control" size="60">
							</div>
					    </td>
				   	</tr>
			        <tr>
					    <th>statut</th>
				        <td>
					        <div class="input-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>Note</th>
					        <td>
					        <div class="input-key">
								<input type="text" class="form-control" name="memo" size="60">
							</div>
					    </td>
				   	</tr>
				    <tr>
				        <th><input type="submit" value="enregistrement" class="input-submit"></th>
				        <td></td>
			        </tr>
			    </tbody>
			</table>
	    </form>
	</div>
</body>

Il s'agit de l'écran de confirmation lorsque l'enregistrement est terminé. Ici vous pouvez voir ce que vous publiez.

task-insert-comp.jsp


<body>
<%
String task_name = (String)request.getAttribute("task_name");
int category_id = (int)request.getAttribute("category_id");
String category_name = (String)request.getAttribute("category_name");
Date limit_date = (Date)request.getAttribute("limit_date");
String status_code = (String)request.getAttribute("status_code");
String status_name = (String)request.getAttribute("status_name");
String memo = (String)request.getAttribute("memo");

%>
<jsp:include page="header.jsp"/>
	<div class="contain">
		<div class="box">
		  <h3>L'enregistrement de la tâche est terminé</h3>
		  <p>Je me suis inscrit avec le contenu suivant</p>
		  <hr>
		  <p>
Nom de la tâche:<%=task_name %><br>
Catégorie:<%=category_id %>:<%=category_name %><br>
Date limite:<%=limit_date %><br>
statut:<%=status_code %>:<%=status_name %><br>
Remarque:<%=memo %><br>
		  </p>
		  <a href="menu.jsp">Retour au menu</a>
		</div>
	</div>
</body>

Ceci est l'affichage lorsque la publication échoue. En particulier, dans le cas d'une erreur de saisie, l'emplacement où l'erreur s'est produite est affiché.

task-insert-failure.jsp


<body>
<!--L'erreur d'étendue de la demande répertorie les raisons pour lesquelles l'entrée était incorrecte, alors recevez ceci-->
<%
List<String> error = (List<String>)request.getAttribute("error");
%>
	<jsp:include page="header.jsp"/>
	<div class="contain">
		<div class="box">
		  	<h3>Échec de l'enregistrement de la tâche</h3>
		  	<hr>
		  	<p>*Les causes suivantes sont possibles</p>
		  	<ul>
<!--Erreur d'affichage-->
<%for(String er : error){ %>
		  		<li><%=er %></li>
<%} %>
		  </ul>
		  <a href="task-insert.jsp">Revenir à l'écran d'inscription</a>
		</div>
	</div>
</body>


Créer un DAO

Commencez par créer une méthode d'enregistrement des tâches.

model.dao.TaskDAO.java


/**
	 *Méthode d'enregistrement des tâches
	 * @param task_name
	 * @param category_id
	 * @param limit_date
	 * @param user_id
	 * @param status_code
	 * @param memo
	 * @return Nombre d'exécutions
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	 public int insertTask(String task_name, int category_id, Date limit_date, String user_id, String status_code, String memo) throws SQLException, ClassNotFoundException {
//Paramètres d'entrée et utilisateur de l'instruction SQL_Créer un enregistrement en spécifiant un identifiant
		 String sql = "insert into t_task (task_name, category_id, limit_date, user_id, status_code, memo) values(?, ?, ?, ?, ?, ?)";
		 int sum = 0;
//Se connecter à la base de données
		 try(Connection con = ConnectionManager.getConnection();
				 PreparedStatement pstmt = con.prepareStatement(sql)){
			 pstmt.setString(1, task_name);
			 pstmt.setInt(2, category_id);
			 pstmt.setDate(3, limit_date);
			 pstmt.setString(4, user_id);
			 pstmt.setString(5, status_code);
			 pstmt.setString(6, memo);
//Exécution de l'instruction SQL de mise à jour
			 sum = pstmt.executeUpdate();
		 }
		 return sum;
	 }

L'explication détaillée est la même que dans la partie 2 UserDAO.java. Je souhaite afficher le nom du statut car il est facile à comprendre uniquement par l'identifiant du statut. Utilisons donc une méthode pour obtenir status_name avec status_id comme argument

model.dao.StatusDAO.java


public class StatusDAO {
	/**
	 *Méthode pour obtenir le nom du statut
	 * @param status_code
	 * @return
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public String getStatusName(String status_code) throws SQLException, ClassNotFoundException {
		String sql = "select status_name from m_status where status_code = ?";
		String status_name ="inconnue";

		try(Connection con = ConnectionManager.getConnection();
				PreparedStatement pstmt = con.prepareStatement(sql)){
			pstmt.setString(1, status_code);
			ResultSet res = pstmt.executeQuery();

			while(res.next()) {
				status_name = res.getNString("status_name");
			}
		}
		return status_name;
	}
}

L'explication détaillée est la même que dans la partie 2 UserDAO.java. Je souhaite afficher le nom du statut car il est facile à comprendre uniquement avec la catégorie Code. Utilisons donc une méthode pour obtenir nom_catégorie avec code_catégorie comme argument

model.dao.CategoryDAO.java


public class CategoryDAO {
	/**
	 *Méthode pour obtenir le nom de la catégorie
	 * @param category_id
	 * @return
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public String getCategoryName(int category_id) throws SQLException, ClassNotFoundException {
		String sql = "select category_name from m_category where category_id = ?";
		String category_name ="inconnue";

		try(Connection con = ConnectionManager.getConnection();
				PreparedStatement pstmt = con.prepareStatement(sql)){
			pstmt.setInt(1, category_id);
			ResultSet res = pstmt.executeQuery();

			while(res.next()) {
				category_name = res.getNString("category_name");
			}
		}
		return category_name;
	}

Créer un servlet

servlet.TaskInsertServlet.java


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//Génération DAO
		TaskDAO taskdao = new TaskDAO();
		CategoryDAO categorydao = new CategoryDAO();
		StatusDAO statusdao = new StatusDAO();

		//Obtenir les paramètres
		request.setCharacterEncoding("UTF-8");
		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");

		//Obtenir les informations sur l'utilisateur connecté à partir de l'étendue de la session et utiliser l'utilisateur_Obtenir l'identifiant
		HttpSession session = request.getSession();
		String user_id = (String)session.getAttribute("current_user_id");

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

		//vérification de session
		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");
		}
		if(category_id_str.equals("Choose...")) {
			error.add("Aucune catégorie sélectionnée");
		}
		if(status_code.equals("Choose...")) {
			error.add( "Aucun statut sélectionné");
		}
		//Date limite (limite)_date) est spécial car il s'agit d'un type Date
		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");
		}

		//Enregistrer l'erreur pour demander l'étendue
		request.setAttribute("error", error);

		if(task_name != "") {
			try {
				//Convertit les catégories et les délais (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"));

				//Traitement de la base de données par méthode d'insertion
				taskdao.insertTask(task_name, category_id, limit_date, user_id, status_code, memo);

				//Obtenir le nom de la catégorie / le nom du statut
				String category_name = categorydao.getCategoryName(category_id);
				String status_name = statusdao.getStatusName(status_code);

				//Enregistrer les informations d'enregistrement pour demander l'étendue
				request.setAttribute("task_name", task_name);
				request.setAttribute("category_id", category_id);
				request.setAttribute("category_name", category_name);
				request.setAttribute("limit_date", limit_date);
				request.setAttribute("status_code", status_code);
				request.setAttribute("status_name", status_name);
				request.setAttribute("memo", memo);

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

Aperçu de la prochaine fois

Cette fois, j'ai implémenté la fonction d'enregistrement des tâches La prochaine fois, j'essaierai d'afficher une liste de tâches enregistrées, d'ajouter une fonction de tri et d'ajouter une fonction de recherche.

Recommended Posts

Système de gestion de clones / tâches Java / Twitter ③ Ajout d'une fonction d'enregistrement de tâches
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
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
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)
Java (add2)
Java (ajouter)